liuzg123 发表于 2020-5-6 11:31:00

我求的水仙花数为什么不对?


#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)



   

微笑到最后 发表于 2020-5-6 12:11:47

看不懂

Pythonnewers 发表于 2020-5-6 12:13:44

看看,.(我连是啥都不知道{:10_266:})

wuqramy 发表于 2020-5-6 12:15:46

说说你的思路

sunrise085 发表于 2020-5-6 12:32:23

你这怎么可能是水仙花数呢。。。你的算法有问题啊。
看一下你的循环:
外层循环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:01:12

本帖最后由 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)

liuzg123 发表于 2020-5-6 15:08:42

wuqramy 发表于 2020-5-6 12:15
说说你的思路

我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。

wuqramy 发表于 2020-5-6 15:11:21

liuzg123 发表于 2020-5-6 15:08
我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。

思路不对
看上楼

liuzg123 发表于 2020-5-6 15:14:59

liuzg123 发表于 2020-5-6 15:08
我的思路是,从1开始,立方后相加,看相加后哪些数的立方和在100和999之间。

把水仙花数的意思弄错了。但是我的想法是把多个数的立方和在100-999范围内的数找出来,也没达到目的

liuzg123 发表于 2020-5-6 15:17:07

liuzhengyuan 发表于 2020-5-6 13:01
思路不对
正确思路:
你应该知道一个数 %10 就是获取这个数个位上的值吧(比如 265 % 10 == 5)


把水仙花的意思弄错了,明白水仙花的意思后,就写出来了。

rsj0315 发表于 2020-5-6 15:50:30

'''
水仙花数是指一个 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:51:07

liuzg123 发表于 2020-5-6 15:14
把水仙花数的意思弄错了。但是我的想法是把多个数的立方和在100-999范围内的数找出来,也没达到目的

验算了一下,达到了我自己的目的,1**3+2**3+3**3+4**3=100,100+5**3=225。谢谢指点。

liuzg123 发表于 2020-5-6 16:02:12

rsj0315 发表于 2020-5-6 15:50
'''
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身
'''


这个方法简单粗暴,不按老师指导来。也挺好。

liuzg123 发表于 2020-5-6 16:02:54

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]
查看完整版本: 我求的水仙花数为什么不对?