Python算法100例-3.3 阿姆斯特朗数

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.问题拓展

1.问题描述

如果一个整数等于其各个数字的立方和,则该数称为“阿姆斯特朗数”(亦称为自恋性数)。如 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33,就是一个“阿姆斯特朗数”。试编程求1000以内的所有“阿姆斯特朗数”。

2.问题分析

“阿姆斯特朗数”与3.2节中的“水仙花数”的不同在于,前者并没有规定几位数,从两者的定义来看,“水仙花数”可以看作是“阿姆斯特朗数”的一个子集。对于这类问题的算法与“水仙花数”类似,需要把每一位分离出来,然后比较其立方和与原数是否相等。

3.算法设计

本题求的是1000以内满足条件的数,从数的位数来说可以分为一位数、两位数及三位数。这样可以根据数的位数不同分别求出不同范围内的“阿姆斯特朗数”,即一位数(1~9)、两位数(10~99)和三位数(100~999)分别用一个循环语句来实现。

上述方法有其局限性,如果题目改成求1 000 000以内甚至更大范围的话,程序里面会有多个循环,不但程序看起来烦琐,写起来也费事,更重要的是每个循环体做的事情都是一样的:将数的每一位拆分。对于这种重复的事情可以考虑用循环将其简化。对于一个数无论它的位数是多少,如果要将其拆分,要么按从低位到高位的顺序,要么按从高位到低位的顺序。本题按从低位到高位的顺序进行拆分。

从低位到高位进行拆分,每次拆分的都是当前数的个位,可以用当前数n对10求模,即n%10,这样最后一位就被分离出来;再次分离的是原数的次低位,对于次低位,要想办法让其成为新数的最低位,可采用原数n对10求商的方法,即n//10。其他位置的数据求法同上。

题目给出的数据最多三位,我们可以定义三个变量分别来存储原数的个位、十位和百位,也可以用数组来存储,数组的长度为3。

4.确定程序框架

程序流程图如图所示。

在这里插入图片描述

5.完整的程序

%%time
# 阿姆斯特朗数if __name__ == "__main__":a = [0, 0, 0]                           # 列表a用来存储被拆分的数的个位、十位和百位print("1000以内的阿姆斯特朗数:")for i in range(2, 1000):t = 0k = i# 按从低位到高位的顺序拆分数while k:a[t] = k % 10k = k // 10t += 1sum = a[0]**3 + a[1]**3 + a[2]**3if i == sum:print("%d \t " %i, end="\n")
1000以内的阿姆斯特朗数:
153 	 
370 	 
371 	 
407 	 
CPU times: user 4.22 ms, sys: 31 µs, total: 4.25 ms
Wall time: 3.71 ms

6.问题拓展

本题程序采用的是从低位到高位的顺序进行分离。下面将从高位到低位顺序进行拆分的程序段给出,供读者参考。

%%time
# 阿姆斯特朗数if __name__ == "__main__":a = [0, 0, 0]                           # 列表a用来存储被拆分的数的个位、十位和百位print("1000以内的阿姆斯特朗数:")for i in range(2, 1000):# 按从高位到低位的顺序拆分数t = 0k = 1000while k >= 10:a[t] = (i % k) // (k // 10)k = k // 10t += 1sum = a[0]**3 + a[1]**3 + a[2]**3if i == sum:                        # 判断是否为阿姆斯特朗数print("%d \t" %i, end="\n")
1000以内的阿姆斯特朗数:
153 	
370 	
371 	
407 	
CPU times: user 4.85 ms, sys: 324 µs, total: 5.18 ms
Wall time: 4.53 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos开启鉴权+springboot配置用户名密码

nacos默认没有开启鉴权,springboot无需用户名密码即可连接nacos。从2.2.2版本开始,默认控制台也无需登录直接可进行操作。 因此本文记录一下如何开启鉴权,基于nacos2.3.0版本。 编辑nacos服务端的application.properties: # 开…

Linux/Docker 修改系统时区

目录 1. Linux 系统1.1 通过 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作环境: CentOS / AlmaOSMySQL Docker 镜像 1. Linux 系统 1.1 通过 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的时区…

32单片机基础:旋转编码器计次

接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断,当然,这里只初始化一个外部中断也能完成功能的对于编码器而言,下图所示为正转的波形。如果把一相的下降沿用作触发中断,在中断时刻读取另一相的电平,正…

【算法科目】2024年第二届全国大学生信息技术认证挑战赛 题解

图像压缩 曾经看到过,这是一道洛谷原题,很可惜我没做过,有点看不懂就没尝试。 原题链接:B3851 [GESP202306 四级] 图像压缩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 因数分解 直接枚举就行了,从2开始找因子&a…

Spring:EnclosingClass工具类分辨

Spring:EnclosingClass工具类分辨 1 前言 通过Spring的工具分辨EnclosingClass类。 测试类如下: package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …

微信小程序(四十六)登入界面-进阶版

注释很详细,直接上代码 上一篇 此文使用了vant组件库,没有安装配置的可以参考此篇vant组件的安装与配置 新增内容: 1.手机号与验证码格式验证 2.验证码的网络申请和校验 wechat-http模块在好几篇以前已经讲了咋安装的,不记得的友…

最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)

经过两天的踩坑后,终于成功安装,并找到了最快捷的安装方式。接下来就由我来给大家介绍不踩坑安装大法! 一、下载Mysql 首先前往Mysql官网下载 MySQL官方下载地址 第一步,选择安装包,这是最关键的一步,选错安…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题,就是在存商品id的时候我将它使用了JSON.stringify的格式转换了!!!于是便爆出了500这个错误!!! 我将JSON.stringify的格式去除之后,它就正常显示了&…

昇腾ACL应用开发之硬件编解码dvpp

1.前言 在我们进行实际的应用开发时,都会随着对一款产品或者AI芯片的了解加深,大家都会想到有什么可以加速预处理啊或者后处理的手段?常见的不同厂家对于应用开发的时候,都会提供一个硬件解码和硬件编码的能力,这也是抛…

sql注入之sqli-labs/less-3 单引号加括号闭合

输入单引号试探: id1 报错信息里面出现 ) 说明闭合符合里面还有个 ) 再次试探:id1 ) order by 3 -- 查看回显位置: id-1%20%27)%20union%20select%201,2,3%20-- 查看数据库: id-1%20%27)%20union%20select%201,2,database()%2…

Kerberos协议攻防之黄金票据控制整个公司电脑

👉重点内容: 1、网络认证、本地认证、域认证的优略势 2、域认证之Kerberos协议的认证流程详解 3、TGT、Krbtgt、KDC、TGS搞懂这些绕口的概念 4、深入理解黄金票据攻击Golden Ticket Attack 5、实战!通过黄金票据控制内网中所有的电脑

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为:https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式,都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip:192.16…

基于springboot+vue的工厂车间管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【Linux】输入系统应用

# 前置知识 (1)输入子系统分为三层,分别是事件处理层、核心层、设备驱动层; (2)鼠标移动、键盘按键按下等输入事件都需要通过设备驱动层→核心层→事件处理层→用户空间,层层上报,直到应用程序; 事件处理层 (1)事情处理层主要是负…

腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

大数据报告检测到风险等级太高是怎么回事呢?

随着金融风控越来越多元化,大数据作为新兴的技术被运用到贷前风控中去了,不少人也了解过自己的大数据,但是由于相关知识不足,看不懂报告,在常见的问题中,大数据检测到风险等级太高是怎么回事呢?小易大数据…

vsomeip源码剖析--00环境搭建

环境 Win11 WSL2 Ubuntu22.04安装依赖 sudo apt-get install cmake sudo apt-get install libboost-system1.71-dev libboost-thread1.71-dev libboost-log1.71-dev源码编译 获取源码 https://github.com/COVESA/vsomeip.git编译 cd vsomeip mkdir build cd build// 一般…

漫漫数学之旅035

文章目录 经典格言数学习题古今评注名人小传 - 黎勒•笛卡尔 经典格言 完美的数和完美的人是同样罕见的。——黎勒•笛卡尔(Ren Descrates) 完美的数和完美的人都是极为罕见的。这句话表达了一个哲学观点,即无论是在数学领域还是人类自身&am…

Spring框架相关问题

RabbitMQ相关问题 Spring框架相关问题 一、Spring容器中的Bean是线程安全的吗?二、如何保证Spring容器中的Bean是线程安全的呢?三、什么情况下会触发Spring事务回滚?四、如果事务方法抛出IOException,是否会触发Spring事务回滚&a…

Zookeeper学习2:原理、常用脚本、选举机制、监听器

文章目录 原理选举机制(重点)情况1:正常启动集群情况2:集群启动完,中途有机器挂了 监听器客户端向服务端写入数据客户端向服务端Leader节点写入客户端向服务端Follower节点写入 Paxos算法(每个节点都可以提…