题目描述
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样例输出
25/4
解题思路:因为是等比数列 所以 数组应该是有序的。对输入的数据进行排序
计算任意两个相邻的数的比值,求出最小的即可。
注意!!!!!!!出现相同的两个数时(把相同的数看作一个数),即需要去重。。。。
///--- 9
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define LL long long
#define inf 9000000000000
LL a[110];
LL cmp(LL x,LL y)
{
return x>y;
}
LL gcd(LL a,LL b)
{
if(b==0)
return a;
else
{
return gcd(b,a%b);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%lld",&a[i]);
sort(a,a+n,cmp);
LL minn=inf;
LL aa,b;
for(int i=0; i<n-1; i++)
{
if(a[i]==a[i+1])//除去重复的
continue;
LL t=gcd(a[i],a[i+1]);
LL p=a[i]/t;
LL q=a[i+1]/t;
LL k=p/q;
if(minn>k)
{
minn=k;
aa=p;
b=q;
}
}
printf("%lld/%lld\n",aa,b);
}
return 0;
}