题解: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)