鱼C论坛

 找回密码
 立即注册
查看: 2063|回复: 9

[已解决]求水仙花数的代码运行不了

[复制链接]
发表于 2017-8-17 13:10:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写个编程,求100-1000间的水仙花数
如果一个三位数等于其各位数的立方和,则这个数为水仙花数,例如:153 = 1^6+5^3+3^3,则153就是个水仙花数,
各大侠:麻烦看一下我写的程序,为什么运行后,不出答案?

a = 1
b = 0
c = 0
d = (a*100 + b*10 + c)
while (a <= 9) and (b <= 9) and (c <=9):
    if d == a**3 + b**3 + c**3:
        print(d)
        
    a = a + 1
    b = b + 1
    c = c + 1
   
   

最佳答案
2017-8-17 15:59:30
我是新手,我也试着写了一个
num = 0

for i in range(100,1000):
    if i == int(i/1%10)**3+int(i/10%10)**3+int(i/100%10)**3:
        num +=1
        print(i)
    else:
        continue
   
print('一共:'+ str(num))
       
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-17 13:33:29 | 显示全部楼层
第一,d的赋值在循环外,无法虽abc的改变而改变
第二,abc是同时加一的,这样只有100,211,322等数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 13:38:29 | 显示全部楼层
首先你的循环只执行了九次  分别是100 ,211 ,322,433,544,655,766,877,988
第二个问题是 你的d如果放在循环外的话 已经固定为100,而不会随之增长。这一切只需要在你的if外打印一下d就可以看出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-8-17 14:22:55 | 显示全部楼层
冬雪雪冬 发表于 2017-8-17 13:33
第一,d的赋值在循环外,无法虽abc的改变而改变
第二,abc是同时加一的,这样只有100,211,322等数字

如果在这个基础上改进该代码,
是不是只要解决两点:
1,d放在循环内,
2,a,b,c不同时+1
就满足条件了呢?
还是必须得换个思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 14:25:49 | 显示全部楼层
meto 发表于 2017-8-17 13:38
首先你的循环只执行了九次  分别是100 ,211 ,322,433,544,655,766,877,988
第二个问题是 你的d如果放在 ...

谢谢,帮我看出了问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 14:28:48 | 显示全部楼层
jackwong 发表于 2017-8-17 14:22
如果在这个基础上改进该代码,
是不是只要解决两点:
1,d放在循环内,

是的,按照你的原题修改需改为三重循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 15:03:02 | 显示全部楼层
冬雪雪冬 发表于 2017-8-17 14:28
是的,按照你的原题修改需改为三重循环。

能不能再请帮忙,写一下该三重循环,我是个新手,刚刚试写了好几次,也没成功
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 15:40:46 | 显示全部楼层
jackwong 发表于 2017-8-17 15:03
能不能再请帮忙,写一下该三重循环,我是个新手,刚刚试写了好几次,也没成功

for a in range(9):
    for b in range(9):
       for c in range(9):
这样就可以了,但实际上这样反而变麻烦了,有更简单的办法。
直接for i in range(999)
然后将abc组合起来判断是否等于i  等于的话就打印出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-8-17 15:59:30 | 显示全部楼层    本楼为最佳答案   
我是新手,我也试着写了一个
num = 0

for i in range(100,1000):
    if i == int(i/1%10)**3+int(i/10%10)**3+int(i/100%10)**3:
        num +=1
        print(i)
    else:
        continue
   
print('一共:'+ str(num))
       
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-8-17 17:08:31 | 显示全部楼层
谢谢回答的各位高手!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-1 16:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表