鱼C论坛

 找回密码
 立即注册
查看: 8569|回复: 62

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

[复制链接]
发表于 2018-5-31 16:17:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-6-2 21:07 编辑

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

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

题目:
求出所以的x, y, z值,使得x + y2 = z3
x, y, z均为1~100的正整数。
要求输出x, y, z的值,每种可能占一行,例如:
2 5 3
4 2 2
4 11 5

......

题目很简单,希望着重考虑执行的效率。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-5-31 16:38:18 | 显示全部楼层
本帖最后由 Python小当家 于 2018-5-31 16:47 编辑
  1. import math
  2. for z in range(2,101):
  3.     z_3 = z*z*z
  4.     y_max = int(math.sqrt(z_3))+1
  5.     if 101 < y_max :
  6.         for y in range(1,101):
  7.             z_3_y_2 = z_3 - y*y
  8.             if z_3_y_2 > 0 and z_3_y_2<101 :
  9.                 print(z_3_y_2 ,y ,z)
  10.     else :
  11.         for y in range(1,y_max):
  12.             z_3_y_2 = z_3 - y*y
  13.             if z_3_y_2 > 0 and z_3_y_2<101 :
  14.                 print(z_3_y_2 ,y ,z)

复制代码
  1. 7 1 2
  2. 4 2 2
  3. 26 1 3
  4. 23 2 3
  5. 18 3 3
  6. 11 4 3
  7. 2 5 3
  8. 63 1 4
  9. 60 2 4
  10. 55 3 4
  11. 48 4 4
  12. 39 5 4
  13. 28 6 4
  14. 15 7 4
  15. 100 5 5
  16. 89 6 5
  17. 76 7 5
  18. 61 8 5
  19. 44 9 5
  20. 25 10 5
  21. 4 11 5
  22. 95 11 6
  23. 72 12 6
  24. 47 13 6
  25. 20 14 6
  26. 87 16 7
  27. 54 17 7
  28. 19 18 7
  29. 71 21 8
  30. 28 22 8
  31. 53 26 9
  32. 100 30 10
  33. 39 31 10
  34. 35 36 11
  35. 47 41 12
  36. 81 46 13
  37. 40 52 14
  38. 11 58 15
  39. 13 70 17
  40. 56 76 18
  41. 79 89 20
  42. 45 96 21
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 16:55:30 | 显示全部楼层
for x in range(1,101):
    for y in range(1,101):
        for z in range(1,101):
            if (x + y**2) == (z**3):
                print(x,y,z)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 17:09:32 | 显示全部楼层
  1. a=list(range(1,101))
  2. for x in a:
  3.     for y in a:
  4.         f=1
  5.         for z in a:
  6.             if y+3>z:
  7.                 break
  8.             b=pow(y,2)
  9.             c=pow(z,3)

  10.             if (x+b)==c:
  11.                 print(x,y,z)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 17:10:31 | 显示全部楼层
本帖最后由 z1446773686 于 2018-5-31 17:52 编辑

2018-05-31_17-50-28.png import time

tim1 = time.clock()

for x in range(1,101):
    for y in range(1,101):
        for z in range(1,101):
            if x + y**2 == z**3:
                print(x,y,z)

tim2 = time.clock()
print('***************')
tim3 = time.clock()
x = 1;y=1;z=1
while(x < 101):
    while(y < 101):
        while(z < 101):
            if x + y**2 == z**3:
                print(x,y,z)
            z += 1
        z = 1
        y += 1
    y = 1
    x += 1
tim4 = time.clock()
print('For:',tim2 - tim1)
print('Wile:',tim4 - tim3)
IDLE运行时间如下:
For: 1.7575066624228262
Wile: 1.9743320664656385

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 17:12:44 | 显示全部楼层
本帖最后由 z1446773686 于 2018-5-31 17:47 编辑


想不出来怎么用递归,哪位大佬能告诉我呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-31 17:58:13 | 显示全部楼层
  1. for x in range(1,101):
  2.     for y in range(1,100):
  3.         for z in range(1,100):
  4.             if x + y*y == z*z*z:
  5.                 print(x, y, z)
复制代码
不考虑效率的版本

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 18:41:17 | 显示全部楼层
  1. maxz=int(pow(10100,1/3))
  2. for z in range(1,maxz+1):
  3.     maxy=int(pow(z**3,1/2))
  4.     for y in range(1,maxy+1):
  5.         x=z**3-y*y
  6.         if x in range(1,101):
  7.             print(x,y,z)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-5-31 21:44:42 | 显示全部楼层
本帖最后由 久疤K 于 2018-5-31 21:55 编辑
  1. def fun(N = 101):
  2.     for x in range(1,N):
  3.         for y in range(1,N):
  4.             left_sum = x + y**2
  5.             sz = int( left_sum ** (1.0/3))
  6.             for z in range(sz,sz+2):
  7.                 if z**3 == left_sum:
  8.                     print(x,y,z)
  9.                     break

  10. def main():
  11.     fun()

  12. if __name__ == "__main__":
  13.     main()
复制代码

答案:
  1. 2 5 3
  2. 4 2 2
  3. 4 11 5
  4. 7 1 2
  5. 11 4 3
  6. 11 58 15
  7. 13 70 17
  8. 15 7 4
  9. 18 3 3
  10. 19 18 7
  11. 20 14 6
  12. 23 2 3
  13. 25 10 5
  14. 26 1 3
  15. 28 6 4
  16. 28 22 8
  17. 35 36 11
  18. 39 5 4
  19. 39 31 10
  20. 40 52 14
  21. 44 9 5
  22. 45 96 21
  23. 47 13 6
  24. 47 41 12
  25. 48 4 4
  26. 53 26 9
  27. 54 17 7
  28. 55 3 4
  29. 56 76 18
  30. 60 2 4
  31. 61 8 5
  32. 63 1 4
  33. 71 21 8
  34. 72 12 6
  35. 76 7 5
  36. 79 89 20
  37. 81 46 13
  38. 87 16 7
  39. 89 6 5
  40. 95 11 6
  41. 100 5 5
  42. 100 30 10
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 01:33:30 | 显示全部楼层
for x in range(1,101):
    for y in range(1,101):
        for z in range(1,101):
            if x + y**2 == z**3:
                print('%d   %d   %d'% (x, y, z))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 08:27:24 | 显示全部楼层

  1. def check(num):
  2.     a = num ** (1/3)
  3.     if int(a) == a:
  4.         return int(a)
  5.     else:
  6.         return False

  7. def main():
  8.     l = []
  9.     for i in range(1, 100):
  10.         for j in range(1, 100):
  11.             for m in range(2, 100):
  12.                 if i + j**2 == m**3 :
  13.                     l.append([i, j, m])
  14.     for x in l:
  15.         print(x)

  16. if __name__ == '__main__':
  17.     main()
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 08:53:27 | 显示全部楼层
for x in range(1,101):
    for y in range(1,101):
        for z in range(1,21):
            if x + y*y == z*z*z:
                print(x,y,z)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 10:45:46 | 显示全部楼层
  1. for z in range(1,101):
  2.         for y in range(1,101):
  3.                 x = z**3 - y**2
  4.                 if 100 >= x > 0:
  5.                         print(x,y,z)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 11:01:48 | 显示全部楼层
  1. def fun178(x):
  2.     for i in range(1,x+1):
  3.         for j in range(1,x+1):
  4.             for n in range(1,x+1):
  5.                 if i + j**2 == n**3:
  6.                     yield '%s %s %s'%(i,j,n)

  7. if __name__ == '__main__':
  8.     for i in fun178(100):
  9.         print(i)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 13:45:23 | 显示全部楼层
import math

for a in range(1, 101):
    for b in range(1, 101):
        if math.ceil((a + b ** 2)**(1/3)) == (a + b ** 2)**(1/3):
            print('%d %d %d' % (a, b, (a + b ** 2)**(1/3)))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 14:53:46 | 显示全部楼层
  1. for x in range(1,100):
  2.         for y in range(1,100):
  3.                 for z in range(1,100):
  4.                         if z**3 == x + y**2:
  5.                                 print(x,y,z)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 15:37:43 | 显示全部楼层
本帖最后由 qy0317 于 2018-6-1 16:02 编辑

import random
x=random.randint(1,101)
y=random.randint(1,101)
z=random.randint(1,101)
while 1 <= (x and y and z) <= 100:
    if not(x + y**2 == z**3):
        print(x,y,z)
        x += 1
        y += 1
        z += 1
        continue


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

使用道具 举报

发表于 2018-6-1 15:43:27 | 显示全部楼层
  0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-1 15:52:36 | 显示全部楼层
for x in range(100):
        for y in range(100):
                for z in range(100):
                        if x+y*y==z*z*z:
                                print(x,y,z)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-6-1 15:59:46 | 显示全部楼层
程序执行结果:
  1. 7 1 2
  2. 4 2 2
  3. 26 1 3
  4. 23 2 3
  5. 18 3 3
  6. 11 4 3
  7. 2 5 3
  8. 63 1 4
  9. 60 2 4
  10. 55 3 4
  11. 48 4 4
  12. 39 5 4
  13. 28 6 4
  14. 15 7 4
  15. 89 6 5
  16. 76 7 5
  17. 61 8 5
  18. 44 9 5
  19. 25 10 5
  20. 4 11 5
  21. 95 11 6
  22. 72 12 6
  23. 47 13 6
  24. 20 14 6
  25. 87 16 7
  26. 54 17 7
  27. 19 18 7
  28. 71 21 8
  29. 28 22 8
  30. 53 26 9
  31. 39 31 10
  32. 35 36 11
  33. 47 41 12
  34. 81 46 13
  35. 40 52 14
  36. 11 58 15
  37. 13 70 17
  38. 56 76 18
  39. 79 89 20
  40. 45 96 21
  41. 程序执行了0.178196s。
复制代码


程序代码:
  1. """
  2. 求出所以的x, y, z值,使得x + y2 = z3
  3. x, y, z均为1~100的正整数。
  4. 要求输出x, y, z的值,每种可能占一行,例如:
  5. 2 5 3
  6. 4 2 2
  7. """
  8. import time


  9. def square(start_number, end_number):
  10.     """
  11.     求出范围内所有平方数,以列表返回
  12.     """
  13.     result = []
  14.     for each in range(start_number, end_number):
  15.         sq = each * each
  16.         if sq <= end_number:
  17.             result.append([each, sq])
  18.         else:
  19.             break
  20.     return result


  21. def cubed(start_number, end_number):
  22.     """
  23.     求出范围内所有立方数,以列表返回
  24.     """
  25.     result = []
  26.     for each in range(start_number, end_number):
  27.         cube = each * each * each
  28.         if cube <= end_number:
  29.             result.append([each, cube])
  30.         else:
  31.             break
  32.     return result


  33. def main():
  34.     squ = square(1, 100 * 100)
  35.     cube = cubed(1, 100 * 100 * 100)
  36.     for z3 in cube:
  37.         for y2 in squ:
  38.             for x in range(1, 100):
  39.                 if x + y2[1] == z3[1]:
  40.                     print(x, y2[0], z3[0])
  41.                 if x >= z3[1]:
  42.                     break
  43.             if y2[1] >= z3[1]:
  44.                 break

  45. if __name__ == '__main__':
  46.     start = time.clock()
  47.     main()
  48.     end = time.clock()
  49.     print("程序执行了%fs。" % (end - start))
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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