欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 【蓝桥杯】43698.最大比例

【蓝桥杯】43698.最大比例

2025/2/1 16:44:37 来源:https://blog.csdn.net/qq_27381427/article/details/145408236  浏览:    关键词:【蓝桥杯】43698.最大比例

题目描述

X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。

并且,相邻的两个级别间的比例是个固定值。

也就是说:所有级别的奖金数构成了一个等比数列。比如:54,36,24,16,其等比值为:3/2

现在,我们随机调查了一些获奖者的奖金数。

请你据此推算可能的最大的等比值。

输入描述

第一行为数字 N(0<N<100),表示接下的一行包含 N 个正整数

第二行包含 N 个正整数 Xi (Xi < 109),用空格分开。每个整数表示调查到的某人的奖金数额

输出描述

一个形如 A/B 的分数,要求 A、B 互质。表示可能的最大比例系数 测试数据保证了输入格式正确,并且最大比例是存在的。

输入输出样例

示例
输入

3
1250 200 32

输出

25/4

算法解析

  首先读取输入的奖金数,对其进行排序并去重,以保证后续处理的数据是有序且无重复的。
  求相邻奖金的比例:计算排序后相邻奖金数的比例,将这些比例化简为最简分数形式。
  求最大公比:通过辗转相除法求出这些最简分数比例的最大公比。

代码实现

from fractions import Fraction# 辗转相除法求两个分数的最大公比
def gcd_fraction(a, b):while b != 0:a, b = b, a % breturn a# 计算最大比例系数
def max_ratio(numbers):# 对奖金数进行排序并去重numbers = sorted(set(numbers))ratios = []# 计算相邻奖金数的比例for i in range(1, len(numbers)):ratio = Fraction(numbers[i], numbers[i - 1])ratios.append(ratio)# 求所有比例的最大公比if len(ratios) == 0:return Fraction(1, 1)result = ratios[0]for ratio in ratios[1:]:# 求两个分数的分子和分母的最大公比num_gcd = gcd_fraction(result.numerator, ratio.numerator)den_gcd = gcd_fraction(result.denominator, ratio.denominator)result = Fraction(num_gcd, den_gcd)return result# 读取输入
n = int(input())
numbers = list(map(int, input().split()))# 计算最大比例系数
ratio = max_ratio(numbers)# 输出结果
print(f"{ratio.numerator}/{ratio.denominator}")

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com