python 求3位数的水仙花数_水仙花数的简单思维和Python设计方法

1.概念理解:要设计程序输出“水仙花数”,就需要知道“水仙花数”的概念。我们把一个三位数其各位数字的立方和等于该数本身的数字称为“水仙花数”。例如,153是“水仙花数”,因为153=1*1*1+5*5*5+3*3*3。

2.问题分析:根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为A),若A与给出的三位数相等,三位数为“水仙花数”,反之,则不是。

3.算法设计:“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100~999。

对应的循环条件如下:

(1)将n整除以100,得出n在百位上的数字hun。

(2)将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten。

(3)将n对10取余,得出n在个位上的数字ind。

(4)求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。

对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。

4.程序框架程序流程图:

5d6034a85edf8db1c14c7022a9906651574e744a.jpeg?token=853354c84f386aa783fa98d7ad9b1b29&s=58083C72110A41490E55F0CF000080B1

5.程序代码:

b219ebc4b74543a93d272cfebfa43187b9011479.jpeg?token=771e29efa8de229f96d5bc9eb0cc95b0&s=29A07D3239DF60C818C5C0DA0000D0B1

# -*- coding:utf-8 -*-

#所有三位数的范围是100-999list1=[]fori inrange(1,10): #遍历百位1-9forj inrange(0,10): #遍历十位0-9fork inrange(0,10): #遍历个位0-9ifi**3+j**3+k**3==i*100+j*10+k: #等式方程#print(i*100+j*10+k) 测试输出效果list1.append(i*100+j*10+k) print("打印出所有的“水仙花数”,它们是:%s"%list1)

6.程序分析:

使用最直接有效的方法,将每个数字进行读取和计算,从100开始,直到999结束,把个位、十位、百位进行逐步计算,把满足条件的数字进行记录。

7.问题拓展求某个数 n 的三次方,可以采用程序中的方法对n连乘三次n*n*n,求五次方、十次方运用这种方法仍可忍受,但如果要求的是n的50次方甚至更大呢?也要像上面一样写50次吗?对于编程者来说这是很痛苦的一种事情,既浪费时间又浪费精力。是否有更好的方法去解决,欢迎大家一起来探讨。感谢您读完了子甲园的分享,欢迎的请留言共同探讨各种逻辑思维和Python开发设计。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值