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的主要内容,如果未能解决你的问题,请参考以下文章

[蓝桥杯] 最大比例

LQ0076 既约分数GCD

LQ0081 直线GCD+数学

LQ0211 奇怪的分式枚举+GCD

LQ0004 等差数列GCD

LQ0004 等差数列GCD