鱼C论坛

 找回密码
 立即注册
查看: 3515|回复: 40

[技术交流] Python:每日一题 218

[复制链接]
发表于 2018-12-9 22:41:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-12-16 20:53 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
水仙花数大家都很熟悉,是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1**3 + 5**3+ 3**3 = 153)。
我们按此规则将一个3位数持续运算下去,看看最后是否能不再变化,例如:
102
1 ** 3 + 0 ** 3 + 2 ** 3 = 9
9 ** 3 = 729
7 ** 3 + 2 ** 3 + 9 ** 3 = 1080
0 ** 3 + 8 ** 3 + 0 ** 3 = 512
5 ** 3 + 1 ** 3 + 2 ** 3 = 134
.......
7 ** 3 + 1 ** 3 + 3 ** 3 = 371
3 ** 3 + 7 ** 3 + 1 ** 3 = 371
可以看出102经反复运算后到371就不再变化了。
与水仙花数的规则稍有不同:
1. 少于3位数,则计算实际的位数的数。
2. 多于3位数,仅计算后3位数。

现在要求计算出100~999中都有哪个数是符合此条件的。

=================================================
希望大家能帮我想一些题目,具体的要求是:
1.难度适中
2.充分利用python的特性
3.最好是自己想出来的
如果有合适的题目,请给我发消息或直接发帖并@我对于出题的鱼油给予奖励。


说说我的解题思路:
1. 什么情况下不符合?
    看到有的鱼油是人为的设置一定的循环次数,这是不可取的。把每次计算的结果放到一个列表temp中,由于大多为1~3位数,少数是4位数,总的数量是有限的,如果不符合,肯定列表中数字会重复。同时如果新的计算结果与列表的最后一个相同就是符合条件的值。
2. 如果提高效率?
    做两个集合,如果1中是不符合的就将列表temp的元素放入on的集合中,这样不管是初始的值还是中间的值,只要在no集合中,就立即判断出是不符合的值。
  1. yes = set()
  2. no = set()
  3. result = []
  4. p = {i: i ** 3 for i in range(10)}
  5. for i in range(100, 1000):
  6.     temp = [0]
  7.     m = i
  8.     while True:
  9.         if m in yes:
  10.             result.append(i)
  11.             yes.update(temp)
  12.             break
  13.         if m in no:
  14.             no.update(temp)
  15.             break
  16.         if m == temp[-1]:
  17.             result.append(i)
  18.             yes.update(set(temp[1:]))
  19.             break
  20.         if m in temp:
  21.             no.update(set(temp[1:]))
  22.             break
  23.         temp.append(m)
  24.         m = p[m % 10] + p[m // 10 % 10] + p[m // 100 % 10]
  25. print(result)
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-9 23:29:27 | 显示全部楼层
本帖最后由 凌九霄 于 2018-12-10 00:24 编辑
  1. def func218(n):
  2.     nL = list(map(int, list(str(n)[ -3: ])))
  3.     result = sum(map(lambda x: x ** 3, nL))
  4.     if result == n:
  5.         return n
  6.     else:
  7.         return func218(result)


  8. for i in range(100, 1000):
  9.     try:
  10.         if func218(i) > 0:
  11.             print(i)
  12.     except RecursionError:
  13.         continue
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 23:47:28 | 显示全部楼层
本帖最后由 塔利班 于 2018-12-10 07:33 编辑
  1. def fun218():
  2.     for i in range(100,1000):
  3.         L=[]
  4.         t=i
  5.         while L.count(i)<2:
  6.             i=sum(map(lambda x:int(x)**3,str(i)))%1000
  7.             L.append(i)
  8.         else:
  9.             if L[-1]==L[-2]:
  10.                 print(t)  
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 23:59:32 | 显示全部楼层
  1. def fun218(n):
  2.     global k,i
  3.     n1=str(n+1000)[-3:]
  4.     m=int(n1[0])**3+int(n1[1])**3+int(n1[2])**3
  5.     if m not in k:
  6.         k.append(m)
  7.         fun218(m)
  8.     else:
  9.         if m in [153,370,371,407]:
  10.             result.append(i)
  11.         else:return
  12. result=[]
  13. for i in range(100,999):
  14.     k=[]
  15.     fun218(i)
  16. print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 09:23:30 | 显示全部楼层
  1. def fun218(num):
  2.     num = str(num)[::-1]
  3.     result = 0
  4.     count = 0
  5.     for i in str(num):
  6.         if count<3:
  7.             result += int(i)**3
  8.         else:
  9.             break
  10.         count +=1      
  11.     return result
  12.    
  13. def main(num):
  14.     result = fun218(num)
  15.     count = 0
  16.     while True:
  17.         if result == fun218(result):
  18.             return result
  19.         else:
  20.             result = fun218(result)
  21.         count +=1
  22.         if count==1000:
  23.             break

  24. if __name__ =='__main__':
  25.     result = list()
  26.     for i in range(100,1000):
  27.         if main(i):
  28.             result.append(i)
  29.     print('100~999符合要求的数有:',result)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 09:54:02 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-12-10 10:04 编辑
  1. # 符合要求的734个,不符合要求的166个。不知道对不对。

  2. def getSumOfMi(number):
  3.     if number >= 1000:
  4.         number = number%1000
  5.     x = number//100
  6.     y = (number%100)//10
  7.     z = number%10
  8.     return x**3+y**3+z**3

  9. def check(number):
  10.     a = [number]
  11.     while True:
  12.         b = getSumOfMi(number)
  13.         if b == a[-1]:
  14.             return True
  15.         elif b in a:
  16.             return False
  17.         else:
  18.             a.append(b)
  19.             number = b

  20. result = []
  21. notResult = []
  22. for i in range(100, 1000):
  23.     if check(i):
  24.         result.append(i)
  25.     else:
  26.         notResult.append(i)
  27. print(len(result))
  28. print(result)
  29. print(len(notResult))
  30. print(notResult)


  31. >>>
  32. 734
  33. [100, 101, 102, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 131, 132, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 152, 153, 154, 155, 156, 157, 159, 161, 162, 164, 165, 166, 167, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 203, 204, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 221, 222, 223, 224, 225, 226, 228, 230, 231, 232, 233, 234, 236, 237, 239, 240, 241, 242, 243, 245, 246, 247, 248, 249, 251, 252, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 270, 273, 274, 275, 276, 277, 279, 281, 282, 284, 285, 286, 288, 289, 290, 291, 293, 294, 295, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 309, 311, 312, 314, 315, 317, 318, 319, 320, 321, 322, 323, 324, 326, 327, 329, 330, 332, 333, 334, 335, 336, 337, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 350, 351, 353, 354, 355, 357, 358, 360, 362, 363, 364, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 384, 385, 387, 388, 389, 390, 391, 392, 393, 396, 397, 398, 399, 401, 402, 403, 404, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 423, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 440, 441, 443, 444, 446, 447, 449, 450, 451, 452, 453, 455, 456, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 476, 477, 478, 480, 481, 482, 483, 485, 486, 487, 488, 489, 490, 492, 494, 495, 496, 498, 499, 500, 501, 503, 504, 506, 507, 508, 509, 510, 512, 513, 514, 515, 516, 517, 519, 521, 522, 524, 525, 527, 528, 529, 530, 531, 533, 534, 535, 537, 538, 540, 541, 542, 543, 545, 546, 548, 549, 551, 552, 553, 554, 555, 556, 558, 559, 560, 561, 564, 565, 567, 568, 569, 570, 571, 572, 573, 576, 577, 578, 579, 580, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 594, 595, 596, 597, 598, 599, 600, 602, 603, 605, 606, 607, 609, 611, 612, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 626, 627, 628, 630, 632, 633, 634, 636, 637, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 654, 655, 657, 658, 659, 660, 661, 662, 663, 664, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 681, 682, 684, 685, 686, 687, 688, 690, 691, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 713, 714, 715, 716, 717, 718, 719, 720, 723, 724, 725, 726, 727, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 746, 747, 748, 750, 751, 752, 753, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 795, 796, 797, 798, 799, 800, 801, 804, 805, 807, 808, 809, 810, 811, 812, 813, 814, 816, 817, 819, 821, 822, 824, 825, 826, 828, 829, 831, 834, 835, 837, 838, 839, 840, 841, 842, 843, 845, 846, 847, 848, 849, 850, 852, 853, 854, 855, 856, 857, 859, 861, 862, 864, 865, 866, 867, 868, 870, 871, 873, 874, 875, 876, 877, 878, 879, 880, 882, 883, 884, 886, 887, 889, 890, 891, 892, 893, 894, 895, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 915, 916, 917, 918, 919, 920, 921, 923, 924, 925, 927, 928, 929, 930, 931, 932, 933, 936, 937, 938, 939, 940, 942, 944, 945, 946, 948, 949, 950, 951, 952, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 969, 970, 971, 972, 973, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999]
  34. 166
  35. [103, 106, 115, 127, 130, 133, 136, 149, 151, 158, 160, 163, 172, 185, 188, 194, 202, 205, 208, 217, 220, 227, 229, 235, 238, 244, 250, 253, 256, 265, 269, 271, 272, 278, 280, 283, 287, 292, 296, 301, 308, 310, 313, 316, 325, 328, 331, 338, 349, 352, 356, 359, 361, 365, 368, 380, 382, 383, 386, 394, 395, 400, 406, 419, 424, 439, 442, 445, 448, 454, 457, 460, 475, 479, 484, 491, 493, 497, 502, 505, 511, 518, 520, 523, 526, 532, 536, 539, 544, 547, 550, 557, 562, 563, 566, 574, 575, 581, 588, 593, 601, 604, 608, 610, 613, 625, 629, 631, 635, 638, 640, 652, 653, 656, 665, 680, 683, 689, 692, 698, 712, 721, 722, 728, 745, 749, 754, 755, 782, 794, 802, 803, 806, 815, 818, 820, 823, 827, 830, 832, 833, 836, 844, 851, 858, 860, 863, 869, 872, 881, 885, 888, 896, 914, 922, 926, 934, 935, 941, 943, 947, 953, 962, 968, 974, 986]
  36. >>>
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 10:02:13 | 显示全部楼层
  1. l = []

  2. def IsSame(num):
  3.     num = num %1000
  4.     l.append(num)
  5.     num = (num %10)** 3 + ((num //10) %10)** 3 + (num //100)** 3
  6.     if num == l[-1]:
  7.         l.clear()
  8.         return True
  9.     else:
  10.         if num in l:
  11.             l.clear()
  12.             return False
  13.         else:
  14.             return IsSame(num)
  15.         
  16. if __name__ == '__main__':
  17.     for i in range(100, 1000):  
  18.         if IsSame(i):
  19.            print(i)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 10:04:14 | 显示全部楼层
  1. def fun218(i):
  2.     try:
  3.         L = [int(j) for j in str(i).zfill(3)[::-1]]
  4.     except RecursionError:
  5.         return 0
  6.     sum1 = L[0]**3 + L[1]**3 + L[2]**3
  7.     if sum1 == i:
  8.         return 1
  9.     else:
  10.         return fun218(sum1)
  11.         
  12. result = list()

  13. for i in range(100, 1000):   
  14.     if fun218(i):
  15.         result.append(i)
  16.    
  17. print(result)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 10:23:08 | 显示全部楼层
  1. def func128_1(m):
  2.     n = m
  3.     count = 0
  4.     for i in range(100):
  5.         if n < 1000 :
  6.             a = n //100
  7.             b = (n-a*100)//10
  8.             c = n -a*100-b*10
  9.             y = a**3+b**3+c**3
  10.             if n ==y :
  11.                 count+=1
  12.             if count == 50:
  13.                  return m
  14.             n = y
  15.         else:
  16.             n = n %1000
  17.             a = n // 100
  18.             b = (n - a * 100) // 10
  19.             c = n - a*100 - b*10
  20.             y = a ** 3 + b ** 3 + c ** 3
  21.             if n==y :
  22.                 count+=1
  23.             if count == 50:
  24.                 return m
  25.             n = y
  26.     return -1
复制代码

  1. def func218_2():
  2.     nums =[i for i in range(100,1000)]
  3.     list_1 =[]
  4.     for j in nums:
  5.         list_1.append(func128_1(j))
  6.     result = list(set(list_1))
  7.     result.remove(-1)
  8.     print(result)
  9.     return result
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-12-10 12:52:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 14:39:25 | 显示全部楼层
tar_list = []
for each in range(100, 1000):
    num1 = each
    num2 = 1
    i = 1
    while num1 != num2 and i < 100:
        num2 = num1
        hundred_num = int(str(num1 // 100)[-1])
        ten_num = int(str(num1 // 10)[-1])
        one_num = int(str(num1)[-1])
        num1 = hundred_num ** 3 + ten_num ** 3 + one_num ** 3
        #print(num1, num2, hundred_num, ten_num, one_num)
        if num1 == num2:
            #print('-----------' + str(each))
            tar_list.append(each)
            break
        else:
            i += 1
print(len(tar_list))
print(tar_list)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 16:59:14 | 显示全部楼层
本帖最后由 undi 于 2018-12-10 17:18 编辑

def fun218(n):
    a, b = divmod(n, 10)
    c, d = divmod(a, 10)
    e, f = divmod(c, 10)
    return b**3 + d**3 + f**3

num_list = []
num_list2 = []
for i in range(100, 999):
    m = i
    while fun218(m) != m:
        m = fun218(m)
        if m in num_list:
            break        
        num_list.append(m)
    if fun218(m) == m:
        num_list2.append(i)

for i in num_list2:
    while fun218(i) != i:
        i = fun218(i)
        if (1000 > i > 99) and (i not in num_list2):
            num_list2.append(i)
            
print(num_list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 17:09:18 | 显示全部楼层
  1. def fun218(data):
  2.     result = [data]
  3.     while True:
  4.         d1 = [int(d) for d in str(data)]
  5.         m0 = sum([i ** 3 for i in d1[-3:]])
  6.         if m0 in result:
  7.             break
  8.         else:
  9.             data = m0
  10.         result.append(m0)

  11.     return True if m0 == result[-1] else False


  12. sxh = [i for i in range(100, 1000) if fun218(i)]
  13. print(sxh)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 17:50:49 | 显示全部楼层
  1. for i in range(100,999):
  2.     print(i,end=' ')
  3.     def jiecheng(i):
  4.         baiwei = int(i / 100)
  5.         shiwei = int(i % 100 / 10)
  6.         gewei = int(i % 100 % 10)
  7.         n=baiwei**3+shiwei**3+gewei**3

  8.         if n>999:
  9.             return (jiecheng(n - 1000))
  10.         if n==i:
  11.             return n
  12.         else:
  13.             try:
  14.                  return jiecheng(n)
  15.             except:
  16.                 return "no such number"
  17.     a=jiecheng(i)
  18.     print(a)
复制代码

点评

循环应该是range(100, 1000)  发表于 2018-12-16 20:23

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 22:03:02 | 显示全部楼层
本帖最后由 fan1993423 于 2018-12-10 22:14 编辑

看大佬的代码吧,我写的不好
  1. k=[i for i in range(100,1000) if int(str(i)[0])**3+int(str(i)[1])**3+int(str(i)[2])**3==i]
  2. def fun218(i):
  3.     a=0
  4.     count=0
  5.     while a not in k:
  6.         if len(str(i))==3:
  7.             a = int(str(i)[0]) ** 3 + int(str(i)[1]) ** 3 + int(str(i)[2]) ** 3
  8.         elif len(str(i))==2:
  9.             a = int(str(i)[0]) ** 3 + int(str(i)[1]) ** 3
  10.         elif len(str(i))==1:
  11.             a = int(str(i)[0]) ** 3
  12.         else:
  13.             a = int(str(i)[-1]) ** 3 + int(str(i)[-2]) ** 3 + int(str(i)[-3]) ** 3
  14.         d.append(a)
  15.         i=0
  16.         if len(str(a)) <= 3:
  17.             for j in range(len(str(a))):
  18.                 i+= int(str(a)[j]) ** 3
  19.         else:
  20.             i = int(str(a)[-1]) ** 3 + int(str(a)[-2]) ** 3 + int(str(a)[-3]) ** 3
  21.         d.append(i)
  22.         a=i
  23.         if a in k:
  24.             return d
  25.         count+=1
  26.         if count>15:
  27.             break
  28. o=[]
  29. for i in range(100,1000):
  30.     d=[i]
  31.     m=fun218(i)
  32.     print(m)
  33.     try:
  34.         o.append(m[0])
  35.     except:
  36.         continue
  37. print('所有满足条件的数有:'+'/'.join([str(i) for i in o]))
复制代码

点评

差了几个,如100  发表于 2018-12-16 20:27
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 10:42:04 | 显示全部楼层
  1. flower_num = [x for x in range(100, 1000) if (x//100)**3+((x-x//100*100)//10)**3+(x%10)**3==x]


  2. def compute(n):
  3.     if n > 999:
  4.         return (n//100-10)**3+((n-n//100*100)//10)**3+(n%10)**3
  5.     else:
  6.         return (n//100)**3+((n-n//100*100)//10)**3+(n%10)**3


  7. def num_filter(n):
  8.     temp_list = []
  9.     while n not in temp_list + flower_num:
  10.         temp_list.append(n)
  11.         n = compute(n)
  12.     if n in flower_num:
  13.         return True
  14.     else:
  15.         return False


  16. print(list(filter(num_filter, [x for x in range(100, 1000)])))
复制代码

点评

差了几个,如100  发表于 2018-12-16 20:28
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 10:55:49 | 显示全部楼层
题目写错了,是371不是317
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 11:45:23 | 显示全部楼层
本帖最后由 776667 于 2018-12-17 09:24 编辑
  1. def fun218(x):
  2.    
  3.     def next_one(temp):
  4.         if len(temp) >= 3:
  5.             return int(temp[-3:][0])**3 + int(temp[-3:][1])**3 + int(temp[-3:][2])**3
  6.         return sum([int(i)**3 for i in temp])
  7.      
  8.     start_num = x
  9.     x = next_one(str(x))
  10.     list_output = [x]
  11.     while x != next_one(str(x)):
  12.         x = next_one(str(x))
  13.         if x in list_output:
  14.             return None
  15.         list_output.append(x)
  16.     return start_num

  17. if __name__ == '__main__':
  18.     print([i for i in range(100,1000) if fun218(i) != None])
复制代码
  1. [100, 101, 102, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 131, 132, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 152, 153, 154, 155, 156, 157, 159, 161, 162, 164, 165, 166, 167, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 203, 204, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 221, 222, 223, 224, 225, 226, 228, 230, 231, 232, 233, 234, 236, 237, 239, 240, 241, 242, 243, 245, 246, 247, 248, 249, 251, 252, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 270, 273, 274, 275, 276, 277, 279, 281, 282, 284, 285, 286, 288, 289, 290, 291, 293, 294, 295, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 309, 311, 312, 314, 315, 317, 318, 319, 320, 321, 322, 323, 324, 326, 327, 329, 330, 332, 333, 334, 335, 336, 337, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 350, 351, 353, 354, 355, 357, 358, 360, 362, 363, 364, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 384, 385, 387, 388, 389, 390, 391, 392, 393, 396, 397, 398, 399, 401, 402, 403, 404, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 420, 421, 422, 423, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 440, 441, 443, 444, 446, 447, 449, 450, 451, 452, 453, 455, 456, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 476, 477, 478, 480, 481, 482, 483, 485, 486, 487, 488, 489, 490, 492, 494, 495, 496, 498, 499, 500, 501, 503, 504, 506, 507, 508, 509, 510, 512, 513, 514, 515, 516, 517, 519, 521, 522, 524, 525, 527, 528, 529, 530, 531, 533, 534, 535, 537, 538, 540, 541, 542, 543, 545, 546, 548, 549, 551, 552, 553, 554, 555, 556, 558, 559, 560, 561, 564, 565, 567, 568, 569, 570, 571, 572, 573, 576, 577, 578, 579, 580, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 594, 595, 596, 597, 598, 599, 600, 602, 603, 605, 606, 607, 609, 611, 612, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 626, 627, 628, 630, 632, 633, 634, 636, 637, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 654, 655, 657, 658, 659, 660, 661, 662, 663, 664, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 681, 682, 684, 685, 686, 687, 688, 690, 691, 693, 694, 695, 696, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 713, 714, 715, 716, 717, 718, 719, 720, 723, 724, 725, 726, 727, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 746, 747, 748, 750, 751, 752, 753, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 795, 796, 797, 798, 799, 800, 801, 804, 805, 807, 808, 809, 810, 811, 812, 813, 814, 816, 817, 819, 821, 822, 824, 825, 826, 828, 829, 831, 834, 835, 837, 838, 839, 840, 841, 842, 843, 845, 846, 847, 848, 849, 850, 852, 853, 854, 855, 856, 857, 859, 861, 862, 864, 865, 866, 867, 868, 870, 871, 873, 874, 875, 876, 877, 878, 879, 880, 882, 883, 884, 886, 887, 889, 890, 891, 892, 893, 894, 895, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 915, 916, 917, 918, 919, 920, 921, 923, 924, 925, 927, 928, 929, 930, 931, 932, 933, 936, 937, 938, 939, 940, 942, 944, 945, 946, 948, 949, 950, 951, 952, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 969, 970, 971, 972, 973, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999]
复制代码

我晕,题目没看清楚,我以为最后一定要得到水仙花数才行。。。

点评

差了几个,如100  发表于 2018-12-16 20:29
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 14:38:01 | 显示全部楼层
本帖最后由 晓屁屁 于 2018-12-11 14:40 编辑
  1. def search(num):
  2.     if len(str(num)) > 3:
  3.         num = int(str(num)[2:])
  4.         geWei = num % 10
  5.         baiWei = int(num / 100)
  6.         shiWei = int((num - baiWei * 100) / 10)
  7.     else:
  8.         geWei = num % 10
  9.         baiWei = int(num / 100)
  10.         shiWei = int((num - baiWei * 100) / 10)
  11.     return baiWei,shiWei,geWei
  12. def fun218():
  13.     no = 0
  14.     for each in range(100,1000):
  15.         # print(search(each))
  16.         a = search(each)[0]**3 + search(each)[1]**3 + search(each)[2] ** 3
  17.         # print(search(a))
  18.         while 1:
  19.             b = search(a)[0]**3 + search(a)[1]**3 + search(a)[2] ** 3
  20.             # print(a)
  21.             # print(b)
  22.             if a != b:
  23.                 a = search(b)[0]**3 + search(b)[1]**3 + search(b)[2] ** 3
  24.                 # input('--')
  25.                 no += 1
  26.                 if no == 1000:
  27.                     no = 0
  28.                     break
  29.             elif a == b:
  30.                 no = 0
  31.                 print(each)
  32.                 break
  33. if __name__ == '__main__':
  34.     fun218()
复制代码



符合条件的这么多么? 我设置最大计算1000层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 18:49:04 | 显示全部楼层
  1. def sxh(n):
  2.     L = [n]
  3.     while True:
  4.         s = str(L[-1])
  5.         if len(s) > 3:
  6.             s = s[len(s)-3:len(s)]
  7.         x = 0
  8.         for i in s:
  9.             x += int(i) ** 3
  10.         if x == L[-1]:
  11.             print(L) # 顺便输出计算的中间值
  12.             return True
  13.         elif x in L:
  14.             return False
  15.         L.append(x)

  16. print(list(filter(sxh, range(100,1000))))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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