AcWing 1246. 等差数列(Java解法)
原题链接
中等
作者:
是晴天呀
,
2021-04-10 17:39:40
,
所有人可见
,
阅读 783
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static int n;
static int a[]; //读取数组
static int b[]; //b数组记录a数组各个元素之间的差值
static int inter; //记录a数组最大值和最小值的差值
public static void main(String[] args) throws NumberFormatException, IOException {
n=Integer.parseInt(br.readLine());
a=new int[n];
b=new int[n-1];
String srr[]=br.readLine().split(" ");
for(int i=0;i<srr.length;i++) {
a[i]=Integer.parseInt(srr[i]);
}
Arrays.sort(a);
if(a[0]==a[1]) { //公差是0的情况
System.out.println(n);
System.exit(0);
}
inter=a[a.length-1]-a[0];
int mmin=Integer.MAX_VALUE;
for(int i=0;i<b.length;i++) { //b数组记录a数组各个元素之间的差值
b[i]=a[i+1]-a[i];
mmin=Math.min(b[i], mmin); //a数组的公差一定小于等于b数组的最小值,这里先取出b数组的最小值
}
int d=1;
for(int t=mmin;t>=1;t--) { //寻找公差
boolean flag=true; //每次实验一个独立的flag标志位
for(int i=0;i<b.length;i++) {
if(b[i]%t!=0) {
flag=false;
break;
}
}
if(flag) {
d=t;
break;
}
}
System.out.println(inter/d+1);
}
}