题解:P8636 [蓝桥杯 2016 省 AB] 最大比例
前置知识
python 是有专门的 fractions 库,作用是可以把相邻两数的比值求出,在本题中作用极大。
from fractions import Fraction
分析题目
首先进行输入,注意格式即可。
通过样例2可轻松发现,题目数据可能会有多个重复数字,所以要先去重和排序(python 里要实现去重,可以使用集合自动去重,不需要桶数组等方法)。
x = sorted(set(x))
接着使用 fraction 库中的 Fraction 函数求比值。
最后用 numerator 与 denominator 求分子和分母。
代码参考
记得先理解再看代码。
from fractions import Fraction
import math
n = int(input())
x = list(set(list(map(int, input().split(' ')))))
ans1=1
ans2=1
def gcd(a, b):
if b>a:
a,b = b,a
if b==1:
return a
else:
return gcd(b, math.floor(a/b))
ls = sorted(x)
for i in range(len(x)-1):
x[i] = Fraction(ls[i+1],ls[i])
for ls1 in x[:-1]:
ans1 = gcd(ans1, ls1.numerator)
ans2 = gcd(ans2, ls1.denominator)
print(ans1,end='/')
print(ans2)