我求的水仙花数为什么不对?
#1
t=0
list1=[]
n=1
while n<10:
for i in range(n,10):
t+=i**3
if 100<=t<=999:
list1.append(t)
else:
pass
n+=1
print(list1)
看不懂 看看,.(我连是啥都不知道{:10_266:}) 说说你的思路 你这怎么可能是水仙花数呢。。。你的算法有问题啊。
看一下你的循环:
外层循环n=1时,内层循环,t的值逐次递增,分别是1,9,36,100,225,441,784,1296,2025,
外层循环n=2时,内层循环,t的值继续递增,分别是2033,2060,2124……
if判断t为三位数的时候加入列表。列表的结果就是 本帖最后由 liuzhengyuan 于 2020-5-6 13:03 编辑
思路不对
正确思路:
你应该知道一个数 %10 就是获取这个数个位上的值吧(比如 265 % 10 == 5)
这个循环会个反复把 sum 加上 temp 个位的值 的 3 次方(直到 temp = 0 ——因为非 0 为真嘛)
用地板除的原因就是怕出现小数的情况,它的意思就是把一个数的个位去掉(比如 265 // 10 = 26)
https://fishc.com.cn/thread-105546-1-1.html
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i) wuqramy 发表于 2020-5-6 12:15
说说你的思路
我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。 liuzg123 发表于 2020-5-6 15:08
我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。
思路不对
看上楼 liuzg123 发表于 2020-5-6 15:08
我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。
把水仙花数的意思弄错了。但是我的想法是把多个数的立方和在100-999范围内的数找出来,也没达到目的
liuzhengyuan 发表于 2020-5-6 13:01
思路不对
正确思路:
你应该知道一个数 %10 就是获取这个数个位上的值吧(比如 265 % 10 == 5)
把水仙花的意思弄错了,明白水仙花的意思后,就写出来了。 '''
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身
'''
for i in range(100,1000):
a = i//100
b = (i-a*100)//10
c = (i-a*100-b*10)
if i == a**3+b**3+c**3:
print(i)
153
370
371
407 liuzg123 发表于 2020-5-6 15:14
把水仙花数的意思弄错了。但是我的想法是把多个数的立方和在100-999范围内的数找出来,也没达到目的
验算了一下,达到了我自己的目的,1**3+2**3+3**3+4**3=100,100+5**3=225。谢谢指点。 rsj0315 发表于 2020-5-6 15:50
'''
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身
'''
这个方法简单粗暴,不按老师指导来。也挺好。 liuzg123 发表于 2020-5-6 16:02
这个方法简单粗暴,不按老师指导来。也挺好。
for i in range(100,1000):
a=(i%10)**3
b=(i//100)**3
c=((i//10)%10)**3
if a+b+c==i:
print(i)
页:
[1]