LQ0047 最大比例GCD
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0047 最大比例GCD相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2016初赛 C++ A组H题
题目描述
X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54。其等比值为:3/2
现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。
输入格式
输入存在多组测试数据
第一行为数字 N (0<N<100),表示接下的一行包含N个正整数
第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额
输出格式
对于每组测试数据,输出一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数
输入样例
3
1250 200 32
4
3125 32 32 200
3
549755813888 524288 2
输出样例
25/4
5/2
4/1
问题分析
给解题程序代码,不解释。
AC的C++语言程序如下:
/* LQ0047 最大比例 */
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
const int N = 100;
LL b[N], c[N], a[N];
LL gcd2(LL a, LL b)
if (a < b) swap(a, b);
if (b == 1) return a;
return gcd2(b, a / b);
int main()
int n;
while(cin >> n)
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int cnt = 0;
for (int i = 1; i < n; i++)
if (a[i] != a[i - 1])
LL gcd = __gcd(a[i], a[i - 1]);
b[cnt] = a[i - 1] / gcd;
c[cnt++] = a[i] / gcd;
LL t1 = b[0], t2 = c[0];
for (int i = 1; i < cnt; i++)
t1 = gcd2(t1, b[i]);
t2 = gcd2(t2, c[i]);
cout << t2 << "/" << t1 << endl;
return 0;
以上是关于LQ0047 最大比例GCD的主要内容,如果未能解决你的问题,请参考以下文章