收纳空白1321 发表于 2022-4-8 12:47:34

水仙花数 我没有理解 求助各位大佬

这个是我本来的想法
while True:
    import random

    a = random.choice()
    b = random.choice()
    c = random.choice()

    for num in range(100,1000):
      if num != 100*a + 10*b + c:
            continue
      
      if num == a**3 + b**3 + c**3:
            print(num)
然后这里的 num能不能让它只打出答案 然后答案不要一直打印
看到它一直在打印重复的答案 我还以为我弄错了

然后是018讲的作业的答案 我没有完全理解
for i in range(100, 1000):
    sum = 0
    temp = i

    while temp:
      sum = sum + (temp % 10) ** 3
      temp //= 10

    if sum == i:
      print(i)

这个 sum = sum + (temp % 10)**3
temp //= 10

就是这个没有理解
求助各位大佬{:5_111:}

收纳空白1321 发表于 2022-4-8 12:54:47

好吧,我现在理解了, 就是在018讲已经讲清楚了 我没有仔细看{:5_104:}

sum = sum + (temp % 10) ** 3 的功能就是每次将最后一位计算三次方的结果累加到 sum 变量里面
temp //= 10 这句就不难理解了,123 拿出 3 之后,下一步就应该是拿倒数第二位来算三次方了,所以我们应该将 123 去掉一位,变成 12,那十进制数去掉末位的方法当然就是除以 10 咯

isdkz 发表于 2022-4-8 12:57:08

本帖最后由 isdkz 于 2022-4-8 12:59 编辑

第一:你那个一直打印重复的答案是因为你用了随机,

随机出重复的很正常,这种情况不是测什么概率的你就不应该用随机,得用枚举,

第二:答案里的是在三位数中枚举,temp % 10 可以得到最后一位数,

而 temp %10 想要得到它的高位数就得把高位往低位挪,

temp //= 10 可以丢弃最后一位数,这样高位自然就可以往低位挪了

收纳空白1321 发表于 2022-4-8 13:24:42

本帖最后由 收纳空白1321 于 2022-4-8 13:27 编辑

isdkz 发表于 2022-4-8 12:57
第一:你那个一直打印重复的答案是因为你用了随机,

随机出重复的很正常,这种情况不是测什么概率的你就 ...

感谢大佬的帮助{:5_111:}
枚举是在 小甲鱼的视频 后面出现的吗 是的话 我就 慢慢看过去
不是的话大佬您说说在哪里可以找到{:5_111:}

isdkz 发表于 2022-4-8 13:31:09

收纳空白1321 发表于 2022-4-8 13:24
感谢大佬的帮助
枚举是在 小甲鱼的视频 后面出现的吗 是的话 我就 慢慢看过去
不是的话   ...

https://baike.baidu.com/item/%E6%9E%9A%E4%B8%BE%E6%B3%95/2473707

收纳空白1321 发表于 2022-4-8 13:37:56

isdkz 发表于 2022-4-8 13:31
https://baike.baidu.com/item/%E6%9E%9A%E4%B8%BE%E6%B3%95/2473707

感谢大佬的帮助{:5_111:}

hornwong 发表于 2022-4-14 23:15:20

{:5_95:}

收纳空白1321 发表于 2022-4-15 08:45:07

hornwong 发表于 2022-4-14 23:15


{:5_95:}
页: [1]
查看完整版本: 水仙花数 我没有理解 求助各位大佬