lubcat 发表于 2017-2-14 16:58:35

关于水仙花数求法

def hua():
    x = 1
    y = 1
    z = 1
    for x in range(1,10):
      for y in range(1,10):
            for z in range(1,10):
                s = 100*x + 10*y + z
                if s == x**3 + y**3 + z**3:
                  print(s)
                else:
                  break

自己摸索的算法,只能得到371这个结果。求教各位前辈指点一二

lubcat 发表于 2017-2-14 17:01:43

本帖最后由 lubcat 于 2017-2-14 17:10 编辑

之后推敲了下,x,y,z所在数位可能一共有6种情况,
但添加全部情况之后,打印的内容杂乱,其中包含有水仙花数。

s = 100*x + 10*y +z
          s = 100*x + 10*z +y
          s = 100*y + 10*x +z
          s = 100*y + 10*z +x
          s = 100*z + 10*x +y
          s = 100*z + 10*y +x

这种算法是否可行?

小兔兔娃 发表于 2017-2-14 19:00:55

for x in range(1,10):
    for y in range(1,10):
      for z in range(1,10):
            s = 100*x + 10*y + z
            if s == x**3 + y**3 + z**3:
                print(s)

153
371

编程新血 发表于 2017-2-14 19:30:37

问题出在最后的else:break上,这里加else好像无意义。

lubcat 发表于 2017-2-14 19:36:42

小兔兔娃 发表于 2017-2-14 19:00
for x in range(1,10):
    for y in range(1,10):
      for z in range(1,10):


水仙花数不是有4个嘛,剩下的整不出来了……

lubcat 发表于 2017-2-14 19:37:49

编程新血 发表于 2017-2-14 19:30
问题出在最后的else:break上,这里加else好像无意义。

好像也是,for循环结束 程序就结束了。

tianalng233 发表于 2017-2-15 02:10:07

lubcat 发表于 2017-2-14 19:36
水仙花数不是有4个嘛,剩下的整不出来了……

明白了,我们没考虑0的情况,只说了百位不是0没说个位和十位啊,所以只要把y和z的初始值设为0就行了

五行缺五行 发表于 2017-2-15 08:29:07

假设x与y分别为1时,那么你的数是从111开始的,这样的话,过程中会不会有所缺漏呢?

lubcat 发表于 2017-2-15 13:10:25

五行缺五行 发表于 2017-2-15 08:29
假设x与y分别为1时,那么你的数是从111开始的,这样的话,过程中会不会有所缺漏呢?

也就是y,z初始值要从0开始?

lubcat 发表于 2017-2-15 13:13:55

tianalng233 发表于 2017-2-15 02:10
明白了,我们没考虑0的情况,只说了百位不是0没说个位和十位啊,所以只要把y和z的初始值设为0就行了

试了试,果然是y,z取值范围小了{:10_298:}

Michonne 发表于 2017-3-6 17:56:33

我这个答案如何?请学友们评价一下~(得出的答案和老师的一样)
for x in range(1,10):
    for y in range(0,10):
      for z in range(0,10):
            for i in range(100,1000):      
                if i == x**3+y**3+z**3 == x*100+y*10+z:      
                   print(i)
页: [1]
查看完整版本: 关于水仙花数求法