|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
==========================================================================================================
老师的 解法甚为精妙, 当时问过 算法解析, 现在又忘了。 (汗汗。。) 然后我试着用原始的思路解题。 也解出来了:
for i in range(100,1000):
for a in range (1,10):
for b in range (0,9):
for c in range (0,9):
if i==(a**3+b**3+c**3)and i==(a*100+b*10+c):
print(i)
continue
---------------------------------------------------------------------------------------------------------------------
不过在我做的时候也碰到了不明白的点, 比如 for 后面的条件 ,不能用 and 加以并列, 只能嵌套模式。 然后 我现在不太明白, 如果 把 各个in 后面的 range[ ], 直接 写成
[1,10], [0,9], [0,9] 就无法运行, 即使 写成
key=[100,1000]
for i in key:
for a in key:
for b in key:
for c in key:
if i==(a**3+b**3+c**3)and i==(a*100+b*10+c):
print(i)
continue
就是即使前面先设好数组然后,让变量在数组中跑也不行, 记得课上讲, 一组[], 中间元素 用 , 隔开就可生成一个数组,为何 在 for 后面不能直接用。
再一个问题就是, 判定条件里, 如果把 i==(a*100+b*10+c) 这部分去掉, 电脑算的东西我就不知道是怎么得来的 想了半天没 算出跟电脑一致的答案。 盼高手解疑释惑。
本帖最后由 Twilight6 于 2020-7-1 17:36 编辑
比如 for 后面的条件 ,不能用 and 加以并列, 只能嵌套模式。
是的哈,语法就是这样,我们学习每个编程语言,最重要的就是遵循语言的语法,没有这种用法,就没办法使用~
如果 把 各个in 后面的 range[ ], 直接 写成
[1,10], [0,9], [0,9] 就无法运行, 即使 写成
range 是个生成整数对象容器的一个函数,函数调用时候都是用() 括号调用 而不是 [] 用中括号哈,中括号就是像楼上所说的 [0,9] 只有 0 和 9 这两个元素
for 循环是把 可迭代对象的元素一一遍历,所以只会遍历 0,和 9这两个元素,其他的同理
所以你要遍历一个范围就要用 range ,或者你列表为 [0,1,2,3,4,5,6,7,8,9] 这样才算 0~9 了哈哈,所以说还不如直接 range(9)
判定条件里, 如果把 i==(a*100+b*10+c) 这部分去掉, 电脑算的东西我就不知道是怎么得来的 想了半天没 算出跟电脑一致的答案。
去掉之后 打印的结果是 i==(a**3+b**3+c**3) 满足时候 i 的值,因为去掉 i==(a*100+b*10+c) 之后你的打印只有在条件 i==(a**3+b**3+c**3)满足时候才会打印
|
|