wmy1212 发表于 2021-5-30 16:18:13

关于18讲的水仙花数

自己写的代码,跑不出来,不知道哪里出了问题,和参考答案的思路看起来也差了很多。。
求大神解答
for i in range(100,1000):
    a = i//100
    b = (i//10)-a
    c = i-a-b
    if i == a**3 + b**3 + c**3:
      print(i)

zz学编程 发表于 2021-5-30 16:27:55

c = i-a*100-b*10

柿子饼同学 发表于 2021-5-30 16:28:15

本帖最后由 柿子饼同学 于 2021-5-30 16:29 编辑

>>> i = 153
>>> a = i // 100
>>> a
1
>>> b = i // 10 - a
>>> b
14
>>> c = i - a - b
>>> c
138
>>>
你看看,假设i = 153,那i // 10 是15,不是5{:10_245:}
自己写了一个帖子,可以看看{:10_297:}
浅谈水仙花数题目
https://fishc.com.cn/thread-192863-1-1.html
(出处: 鱼C论坛)

Twilight6 发表于 2021-5-30 16:32:24



你的 a // 100 获得的是 百位数的值

而你 b、c 获取的值都是不正确的,我帮你改了下,看代码注释吧

参考代码:

for i in range(100,1000):
    a = i//100
    b = (i//10)%10   
    # 先 // 10 ,去掉个位数,再求余,即得到十位数
    c = i%10   
    # 对 i 直接 %10 求余 即得到个位数值
    if i == a**3 + b**3 + c**3:
      print(i)

还有个更简单的方法,如果你不想用数学计算出各个位置上的数,可以将 i 先转为 字符串,利用字符串切片来进行判断即可:

参考代码:

for i in range(100,1000):
    a,b,c = str(i)
    if i == int(a)**3 + int(b)**3 + int(c)**3:
      print(i)

zz学编程 发表于 2021-5-30 16:32:27

for i in range(100,1000):
    a = i//100
    b = (i//10)-a*10
    c = i-a*100-b*10
    if i == a**3 + b**3 + c**3:
      print(i)

wmy1212 发表于 2021-5-30 16:32:42

zz学编程 发表于 2021-5-30 16:27
c = i-a*100-b*10

啊啊啊,我傻了!蟹蟹!!!

wmy1212 发表于 2021-5-30 16:34:23

柿子饼同学 发表于 2021-5-30 16:28
你看看,假设i = 153,那i // 10 是15,不是5
自己写了一个帖子,可以看看
浅谈水仙 ...

恍然大悟知道自己的致命错误了。。蟹蟹,我看看文章~

wmy1212 发表于 2021-5-30 16:37:13

谢谢大家!我太蠢了!都让我get到自己的错了,可惜只能有一个最佳【就给了第一位同学啦】

Twilight6 发表于 2021-5-30 16:39:01

wmy1212 发表于 2021-5-30 16:37
谢谢大家!我太蠢了!都让我get到自己的错了,可惜只能有一个最佳【就给了第一位同学啦】



第一位同学不是答案,最佳我改给二楼了

不能乱给哈,不然可能会误导别的鱼油

wmy1212 发表于 2021-5-30 16:43:59

Twilight6 发表于 2021-5-30 16:39
第一位同学不是答案,最佳我改给二楼了

不能乱给哈,不然可能会误导别的鱼油

好的哇,知道了{:5_92:}

wmy1212 发表于 2021-5-30 16:47:02

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)
最后修改之后是这样,结果是对的了

柿子饼同学 发表于 2021-5-30 17:38:09

wmy1212 发表于 2021-5-30 16:43
好的哇,知道了

给渔币,太客气了{:10_254:}
页: [1]
查看完整版本: 关于18讲的水仙花数