鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 85|回复: 4

[已解决]009,第二问求水仙数的那题

[复制链接]
最佳答案
0 
发表于 2019-5-15 23:45:38 | 显示全部楼层 |阅读模式

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

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

x
for i in range(100,1000):
    temp = i
    while temp:
        x = int(temp/100)
        y = int((temp - 100*x)/10)
        z = temp-100*x-10*y
    if x**3 + y**3 + z**3 == temp:
        print(i)
麻烦各位大佬帮忙看一下,我这个哪里出了问题,看来看去,没有找出问题,谢谢!
最佳答案
2019-5-16 00:14:55
本帖最后由 jackz007 于 2019-5-16 00:30 编辑
  1.     while temp:
  2.         x = int(temp/100)
  3.         y = int((temp - 100*x)/10)
  4.         z = temp-100*x-10*y
复制代码

      在本例的 while 循环中,循环变量 temp 必须渐次减小才有可能到达循环终点,依目前代码的状况,是个死循环,因为 temp 在循环中并没有任何改变。

      如果按照你的思路,根本就没有必要设计 while 循环,直接算出 i 的百位、十位和个位数值就可以了:
  1. for i in range(100,1000):
  2.     x = i // 100                # 地板(整数)除法,不用 int() 函数,得到的就是整数,这是计算百位数值
  3.     y = (i % 100) // 10         # i % 100 会屏蔽掉百位,剩下十位和个位,这是计算十位数值
  4.     z = i % 10                  # i % 10  屏蔽百位、十位,剩下个位,余数嘛,自然也是整数
  5.     if x ** 3 + y ** 3 + z ** 3 == i :
  6.         print(i)
复制代码


      你还可以参考一下下面的这个代码,适应性可能更强一些
  1. for i in range(100,1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum += (temp % 10) ** 3
  6.         temp //= 10
  7.     if sum = i
  8.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
329 
发表于 2019-5-16 00:14:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-16 00:30 编辑
  1.     while temp:
  2.         x = int(temp/100)
  3.         y = int((temp - 100*x)/10)
  4.         z = temp-100*x-10*y
复制代码

      在本例的 while 循环中,循环变量 temp 必须渐次减小才有可能到达循环终点,依目前代码的状况,是个死循环,因为 temp 在循环中并没有任何改变。

      如果按照你的思路,根本就没有必要设计 while 循环,直接算出 i 的百位、十位和个位数值就可以了:
  1. for i in range(100,1000):
  2.     x = i // 100                # 地板(整数)除法,不用 int() 函数,得到的就是整数,这是计算百位数值
  3.     y = (i % 100) // 10         # i % 100 会屏蔽掉百位,剩下十位和个位,这是计算十位数值
  4.     z = i % 10                  # i % 10  屏蔽百位、十位,剩下个位,余数嘛,自然也是整数
  5.     if x ** 3 + y ** 3 + z ** 3 == i :
  6.         print(i)
复制代码


      你还可以参考一下下面的这个代码,适应性可能更强一些
  1. for i in range(100,1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum += (temp % 10) ** 3
  6.         temp //= 10
  7.     if sum = i
  8.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
125 
发表于 2019-5-16 09:16:51 | 显示全部楼层

  1. for i in range(100,1000):
  2.     temp = i
  3.     while temp:
  4.         x = int(temp/100)
  5.         y = int((temp - 100*x)/10)
  6.         z = temp-100*x-10*y
  7.         break                # 你的循环没有退出条件,加个 break 或者 temp = 0
  8.     if x**3 + y**3 + z**3 == temp:
  9.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2019-5-16 09:51:13 From FishC Mobile | 显示全部楼层
while循环:条件为TRUE进入循环,条件为FALSE时跳出循环
你的程序段中i赋值给temp,while temp:进入循环,然后temp的值一直都是100,执行完z=那行之后,while判断还是TRUE,又进入循环了,程序一直都没有执行到if那句,所以又不报错,又不能得到正确结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
3 
发表于 2019-5-16 11:00:19 | 显示全部楼层
while循环没有任何意义;有for循环控制i和temp的值就行了,去掉这个while循环。
for i in range(100,1000):
    temp = i
    x = int(temp/100)
    y = int((temp - 100*x)/10)
    z = temp-100*x-10*y
    if x**3 + y**3 + z**3 == temp:
        print(i)
就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-5-25 00:48

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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