鱼C论坛

 找回密码
 立即注册
查看: 655|回复: 5

[已解决]简化我的代码

[复制链接]
发表于 2024-11-5 23:54:47 | 显示全部楼层 |阅读模式
50鱼币
题目是:求三个数的最大公约数
我的思路是用辗转相除法求出3个公约数,他们中最小的公约数就是三个数的最大公约数

想简化我的代码
  1. a = int(input())
  2. b = int(input())
  3. c = int(input())
  4. ########## Begin ##########
  5. t1, t2, t3 = 0, 0, 0
  6. m = a % b       #a取余b得m,m为余数
  7. n = b % c       #b取余c得n,n为余数
  8. q = a % c       #a取余c得q,q为余数
  9. a1,a2,a3,b1,b2,b3,c1,c2,c3 = a,a,a,b,b,b,c,c,c
  10. while m != 0:   #比如3%2=1
  11.     a1 = b1       #a = 2
  12.     b1 = m       #b = 1
  13.     m = a1 % b1   #c = 0
  14. t1 = b1
  15. while n != 0:   
  16.     b2 = c2      
  17.     c2 = n      
  18.     n = b2 % c2
  19. t2 = c2
  20. while q != 0:
  21.     a3 = c3
  22.     c3 = q
  23.     q = a3 % c3
  24. t3 = c3
  25. t =  min(t1, t2, t3)
  26. ########## End ##########
  27. print(t)
复制代码
最佳答案
2024-11-5 23:54:48


当然还有其他方法。例如,你可以使用最小值进行递减来寻找最大公约数。这种方式更直观,但效率可能相对较低。下面是这种方法的实现:

  1. def gcd_of_three_numbers(x, y, z):
  2.     # 从三个数中找出最小的那个
  3.     minimum = min(x, y, z)
  4.    
  5.     # 从最小的数开始递减,检查它是否能整除这三个数
  6.     for i in range(minimum, 0, -1):
  7.         if x % i == 0 and y % i == 0 and z % i == 0:
  8.             return i

  9. a = int(input())
  10. b = int(input())
  11. c = int(input())

  12. # 调用函数计算最大公约数并输出
  13. print(gcd_of_three_numbers(a, b, c))
复制代码


这个方法通过从最小的数开始递减来寻找最大公约数。这在数字较小时是可行的,但如果数字很大,性能可能不如辗转相除法(也称为欧几里得算法)高效。此外,这种方法不依赖任何额外的库函数,是一种基础而直接的方法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

最佳答案

查看完整内容

当然还有其他方法。例如,你可以使用最小值进行递减来寻找最大公约数。这种方式更直观,但效率可能相对较低。下面是这种方法的实现: 这个方法通过从最小的数开始递减来寻找最大公约数。这在数字较小时是可行的,但如果数字很大,性能可能不如辗转相除法(也称为欧几里得算法)高效。此外,这种方法不依赖任何额外的库函数,是一种基础而直接的方法。 以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-5 23:54:48 | 显示全部楼层    本楼为最佳答案   


当然还有其他方法。例如,你可以使用最小值进行递减来寻找最大公约数。这种方式更直观,但效率可能相对较低。下面是这种方法的实现:

  1. def gcd_of_three_numbers(x, y, z):
  2.     # 从三个数中找出最小的那个
  3.     minimum = min(x, y, z)
  4.    
  5.     # 从最小的数开始递减,检查它是否能整除这三个数
  6.     for i in range(minimum, 0, -1):
  7.         if x % i == 0 and y % i == 0 and z % i == 0:
  8.             return i

  9. a = int(input())
  10. b = int(input())
  11. c = int(input())

  12. # 调用函数计算最大公约数并输出
  13. print(gcd_of_three_numbers(a, b, c))
复制代码


这个方法通过从最小的数开始递减来寻找最大公约数。这在数字较小时是可行的,但如果数字很大,性能可能不如辗转相除法(也称为欧几里得算法)高效。此外,这种方法不依赖任何额外的库函数,是一种基础而直接的方法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-5 23:54:55 | 显示全部楼层
你可以通过定义一个辅助函数来简化求最大公约数的过程,并使用Python内置的`math.gcd`函数来计算两个数的最大公约数,然后依次求得三个数的最大公约数。下面是简化后的代码:

  1. import math

  2. def gcd_of_three_numbers(x, y, z):
  3.     return math.gcd(math.gcd(x, y), z)

  4. a = int(input())
  5. b = int(input())
  6. c = int(input())

  7. # 调用函数计算最大公约数并输出
  8. print(gcd_of_three_numbers(a, b, c))
复制代码


使用`math.gcd`函数可以直接计算两个数的最大公约数,这样不仅简化了代码,还提高了代码的可读性。通过两次调用`gcd`函数,可以很方便地求出三个数的最大公约数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-5 23:57:32 | 显示全部楼层
FishC 发表于 2024-11-5 23:54
你可以通过定义一个辅助函数来简化求最大公约数的过程,并使用Python内置的`math.gcd`函数来计算两个数的最 ...

还有其他方法嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-6 00:17:54 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-6 00:37:11 | 显示全部楼层

不要灌水,小心被关小黑屋。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 08:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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