题目描述
X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54,其等比值为:3223
现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。
输入描述
![](https://i-blog.csdnimg.cn/blog_migrate/e056f1f459ace00163a526d7cd2fdc00.png)
输出描述
一个形如 A/B 的分数,要求 A、B 互质。表示可能的最大比例系数 测试数据保证了输入格式正确,并且最大比例是存在的。
输入输出样例
示例
输入
3
1250 200 32
输出
25/4
运行限制
最大运行时间:3s
最大运行内存: 256M
源码:
import java.util.Arrays;
import java.util.Scanner;
public class 最大比例 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
long[] a=new long[n];
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextLong();
}
Arrays.sort(a);
long[] b=new long[n];
long[] c=new long[n];
int cnt=0;
for (int i = 1; i < a.length; i++) {
if (a[i]!=a[i-1]) {
long tt=gcd(a[i-1],a[i]);
b[cnt]=a[i]/tt;
c[cnt++]=a[i-1]/tt;
}
}
long zi=b[0];
long mu=c[0];
for (int i = 1; i < cnt; i++) {
zi=fast(zi,b[i]);
mu=fast(mu,c[i]);
}
System.out.println(zi+"/"+mu);
}
private static long fast(long a, long b) {
if (a<b) {
long temp=a;
a=b;
b=temp;
}
if (b==1) {
return a;
}
return fast(b, a/b);
}
private static long gcd(long a, long b) {
return b==0? a : gcd(b, a%b);
}
}