当前位置: 首页 > news >正文

linux centos7 系统之编程:求水仙花数

在Python编程中,有列表、元组和字典三类变量可以使用,方便数据的存储与处理,而bash中仅有字符串变量、数组、函数可用,方法运用上受到限制,这与bash基于C语言,注重语法结构的严谨有关。而Python等高级语言更侧重于数据的组合与复用,方便处理,也与现代内存增大,价格低廉有关。

本文在介绍python使用的同时,重点讨论用bash编程求水仙花数。

水仙花数指一个三位数:每位数的3次方之和等于这个数。

例如:153是一个水仙花数:153=1^3+5^3+3^3

我们本案例目标:打印输出所有的水仙花数,从小数开始,升序。每行一个。

一、python语言实现

用python语言实现输出水仙花数的功能,十分方便。

首先,设置一个循环变量,一个3位数的整数,从100取值开始,一一验证,每位数的3次方相加与此数相比较,相等为水仙花数(记录、打印),不相等时,变量取值自动加1,再进行验证,如此循环,直到999为止。如此就可以查找并打印出所有的水仙花数。

for循环:

for i in range(100,1000)

python循环取值:开始100,结束1000-1(1000不取值)

对于每一个数,要计算其每位数的3次方之和,有多种方法:

1.先转$i为字符型数据,再对每一位切片,求出其整数之3次方

2.由$i对10求余,求模,得到每一位数,求出其整数之3次方

定义一个变量sum记录每一个数的各位数之3次方之和

1.由求余数计算立方和

for i in range(100,1000):

    sum = int(i%10)**3+int(i/10%10)**3+int(i/100%10)**3

    if sum == i:

        print(i)

2.由字符切片获得各位数

a.用pow()函数求3次方

由切片可以获得字符串的各个元素,再转为整型数值,用pow()函数求3次方

for i in range(100,1000):

    num = str(i)

    hundred = int(num[0])  # 百位数

    ten = int(num[1])  # 十位数

    one = int(num[2])  # 个位数

    if (pow(one,3) + pow(ten,3) + pow(hundred,3)) == i:

        print(i)

b.用m**n计算m的n次方

由切片可以获得字符串的各个元素,再转为整型数值,用m**n计算m的n次方

for i in range(100,1000):

    num = str(i)

    hundred = int(num[0]) # 百位数

    ten = int(num[1]) # 十位数

    one = int(num[2]) # 个位数

    if int(num[0])**3 + int(num[1])**3 + int(num[2])**3 == i:

        print(i)

3.由函数达得目标

用定义函数来进行测试。

def is_num(n):

  if n < 100 or n > 999: return False

  sum = 0

  for j in str(n):

     sum += int(j) ** 3

  return n == sum

if __name__ == '__main__':

  for i in range(100,1000):

     if is_num(i): print(i)

二、bash语言实现

Linux下用bash语言实现输出水仙花数的功能,方法和代码基本上与python相同。

除循环结构写法不太一样,对变量的处理也有稍微差别。思路与方法相同,就可以快速改写,完成目标。

1.多层for循环嵌套

#!/bin/bash

# 求水仙花数

for((i=1;i<10;i++))

do

        for((j=0;j<10;j++))

        do

                for((k=0;k<10;k++))

                do

                        a=$((i**3+j**3+k**3))

                        b=$((i*100+j*10+k))

                        if [ $a -eq $b ];then

                                echo "$a"

                        fi

                done

        done

done

把一个三位数,取得每一位数字,这里用了最直观的想法:

取每一位数字,再计算3次方,相加就可以了。

更有效率的方法是:不断地除10取余。

2.while循环求数字的各位数

#!/bin/bash

for ((i=100;i<=999;i++))

do

        sum=0

        n=$i

        while [ $n -gt 0 ]

        do

                m=$((n%10)) # 通过对10求余数,第一次得到个位数

                sum=$((sum+m*m*m))  # 每次求出位数的3次方,进行累加

                n=$((n/10))  # 个位数处理完后,再把原数对10取整

                            # 据此,进行第二次循环,第三次循环

        done

        if [ $sum -eq $i ];then

                echo $i

        fi

done

题外话

bash代码求四季花数:

取一个四位数,如果它的每个位上的数字的4次方和与自身相等,则可以称之为四季花数。

与3位的水仙花数相同,计算每位数的4次方之和,再验证是否等于这个四位数。

我们修改一下水仙花数求解代码,在命令行执行。写成一行代码,方便快速执行。

for ((i=1000;i<=9999;i++)); do sum=0; n=$i; while [ $n -gt 0 ];do k=$((n%10)); sum=$((sum+k*k*k*k)); n=$((n/10)); done; if [ $sum -eq $i ]; then echo "四季花数是 $i"; fi; done

扩展设想

其实这类问题还可以扩展为更一般的问题:

有一个N位数,如果它的每一位数字的N次方之和等于自身,则称它为N阶的花朵数。

请求出所有的10阶花朵数。

这个问题就要考虑效率了!感兴趣的可以深入探讨。

相关文章:

linux centos7 系统之编程:求水仙花数

在Python编程中&#xff0c;有列表、元组和字典三类变量可以使用&#xff0c;方便数据的存储与处理&#xff0c;而bash中仅有字符串变量、数组、函数可用&#xff0c;方法运用上受到限制&#xff0c;这与bash基于C语言&#xff0c;注重语法结构的严谨有关。而Python等高级语言更…...

git中的cherry-pick和merge有些区别以及cherry-pick怎么用

git中的cherry-pick和merge在使用场景上有些区别: cherry-pick用于将另一个分支的某一次或几次commit应用到当前分支。它可以选择性地拉取代码修改。merge用于将两个分支合并成一个新分支。它会把整个分支上的所有修改都合并过来。 具体区别:cherry-pick通常用于将bug修复从发…...

【前端】CSS-Flex弹性盒模型布局

目录 一、前言二、Flex布局是什么1、任何一个容器都可以指定为Flex布局2、行内元素也可以使用Flex布局3、Webkit内核的浏览器&#xff0c;必须加上-webkit前缀 三、基本概念四、flex常用的两种属性1、容器属性2、项目属性 五、容器属性1、flex-direction①、定义②、语句1&…...

Android AAPT: error: resource color 异常原因处理

异常体现&#xff1a; Android resource linking failed ERROR:E:\software\Developer\APP\GaoDeTest2\app\src\main\res\values\themes.xml:3:5-9:13: AAPT: error: resource color/purple_500 (aka com.example.gaodetest2:color/purple_500) not found.ERROR:E:\software\De…...

C++std::function和std::bind()的概念

std::function&#xff1a; 一个通用的函数封装器&#xff0c;它允许你存储和调用任何可以被调用的东西&#xff0c;例如函数、函数指针、函数对象、Lambda 表达式等。 std::bind&#xff1a; 用于创建函数对象。一个可调用对象的绑定版本&#xff0c;可以提前绑定某些参数&am…...

QT Creator工具介绍及使用

一、QT的基本概念 QT主要用于图形化界面的开发&#xff0c; QT是基于C编写的一套界面相关的类库&#xff0c;如进程线程库&#xff0c;网络编程的库&#xff0c;数据库操作的库&#xff0c;文件操作的库等。 如何使用这个类库&#xff1a;类库实例化对象(构造函数) --> 学习…...

python爬虫13:pymysql库

python爬虫13&#xff1a;pymysql库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生…...

权限管理 ACL、RBAC、ABAC的学习

ACL(Access Control List&#xff1a;访问控制列表) 最简单的一种方式&#xff0c;将权限直接与用户或用户组相关联&#xff0c;管理员直接给用户授予某些权限即可。 这种模型适用于小型和简单系统&#xff0c;权限一块较为简单&#xff0c;并且角色和权限的变化较少。 RBAC(R…...

python的re正则表达式

一、正在表达式的方法&#xff08;&#xff09;&#xff1a; re是Python中用于处理正则表达式的内置库&#xff0c;提供了许多有用的方法。以下是其中几个常用的方法&#xff1a; re.match(pattern, string): 尝试从字符串的开头匹配一个模式&#xff0c;如果匹配成功则返回匹…...

【算法与数据结构】700、LeetCode二叉搜索树中的搜索

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质&#xff1a;左节点键值 < 中间节点键值 < 右节点键值。那么我们根据此性质&am…...

SpringBoot v2.7.x+ 整合Swagger3入坑记?

目录 一、依赖 二、集成Swagger Java Config 三、配置完毕 四、解决方案 彩蛋 想尝鲜&#xff0c;坑也多&#xff0c;一起入个坑~ 一、依赖 SpringBoot版本&#xff1a;2.7.14 Swagger版本&#xff1a;3.0.0 <dependency><groupId>com.github.xiaoymin<…...

说说你了解的 CDC

分析&回答 什么是 CDC CDC,Change Data Capture,变更数据获取的简称&#xff0c;使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游&#xff0c;供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。用户可以在以下的场景下使用CDC&#xff1a; 使用f…...

SpingMvc入门

SpingMvc入门 1.MVC Spring的工作流程&#xff1a;2.sping mvc入门3.静态资源处理 前言 Spring MVC是一种基于Java的web应用开发框架&#xff0c;它采用了MVC&#xff08;Model-View-Controller&#xff09;设计模式来帮助开发者组织和管理应用程序的各个组件。 1.MVC Spring的…...

JVM的故事——类文件结构

类文件结构 文章目录 类文件结构一、概述二、无关性基石三、Class类文件的结构 一、概述 计算机是只认由0、1组成的二进制码的&#xff0c;不过随着发展&#xff0c;我们编写的程序可以被编译成与指令集无关、平台中立的一种格式。 二、无关性基石 对于不同平台和不同平台的…...

springboot自定义表格(动态合并单元格)

一、需求展示&#xff08;一个订单多个商品&#xff0c;商品数量不限订单行合并&#xff09; 二、技术选型&#xff08;jxls自定义模板&#xff09; <!-- 版本具体看官网Release&#xff0c;这里我们使用 2.13.0 --><dependency><groupId>org.jxls</group…...

C++零碎记录(二)

3. 调用其他类 3.1 类中有其他的类 #include <iostream> using namespace std;//点和圆关系案例//点类 class Point { public://设置xvoid setX(int x){m_X x;}//获取xint getX(){return m_X;}//设置yvoid setY(int y){m_Y y;}//获取yint getY(){return m_Y;}private…...

数学建模:回归分析

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;回归分析 文章目录 数学建模&#xff1a;回归分析回归分析多元线性回归案例 多项式回归一元多项式回归多元二项式回归 非线性回归逐步回归 回归分析 多元线性回归 案例 首先进行回归分…...

数据库(一)

数据库 1.为什么要使用数据库 如果要存储数据&#xff0c;我们是可以使用文件来存储数据的&#xff0c;但是使用文件管理数据有很多缺点&#xff0c;比如&#xff1a; 不安全&#xff0c;不利于管理&#xff0c;查询&#xff0c;如果要存储大量的数据&#xff0c;使用文件管理…...

【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先我们要知道后序遍历数组的最后一个元素必然是根节点&#xff0c;然后根据根节点在中序遍历数组中的…...

kali 安装cpolar内网穿透实现 ssh 远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过cpolar 内网穿透软件实现ssh 远程连接kali! 1. 启动kali ssh 服务 默认新安装的kali系统会关闭ssh 连接服务,我们通…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...