蓝桥杯例题:
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。
现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项?
输入的第一行包含一个整数N。
第二行包含N 个整数A1.A2,…, AN。(注意A1<=AN 并不一定是按等差数列中的顺序给出)
2<=N<=100000,0<=Ai<=10^9
输出一个整数表示答案。
思路:
先将数组的元素由小到大进行排序,因为已经知道是等差数组,所以两个相邻的数之间的差就是数列的公差,算出公差后,项数等于末项减去首项的差除以公差再加一
代码如下:
public class DengCha {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N= sc.nextInt();
ArrayList<Integer> list=new ArrayList<>();
for (int i = 0; i < N; i++) {
int x=sc.nextInt();
list.add(x);
}
//排序,前减后为升序,后减前为降序
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//int d=0;
//记录最小差值为公差
int d=list.get(1)-list.get(0);
for (int i = 0; i < list.size(); i++) {
for (int j=i+1;j<list.size();j++){
if(list.get(j)-list.get(i)<d){
d=list.get(j)-list.get(i);
}
}
}
//项数=末项-首项/公差 +1
int n=(list.get(list.size()-1)-list.get(0))/d;
System.out.println(n+1);
}
}