题目
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 NN 个整数。
现在给出这 NN 个整数,小明想知道包含这 NN 个整数的最短的等差数列有几项?
输入描述
解题思路: 本题就是数学题考等差数列。
要求的是最短项,那肯定是要找公差最大的那个数列对吧,那就是求公差了
最大的公差怎么求? 将每项都减去第一项,然后算出差的最大公约数,就是最大的公差
所以求出差最大公约数后就利用等差数列的公式是不是就求出最后最小的项数
上java代码
import java.util.Arrays;
import java.util.Scanner;
public class Task9 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
Arrays.sort(a);
//将每项减去第一项求出差值
int[] b = new int[n];
for (int i = 0; i < n; i++) {
b[i] = a[i] - a[0];
}
//最大公约数 d 就是等差数列的公差
int d = 0;
for (int i = 0; i < b[n - 1]; i++) {
boolean flag = true;
for (int j = 0; j < n; j++) {
if (b[j] % i != 0) { //全部为0才是所以差值的约数
flag = false;
}
if (flag){
d = i; //找最大小可以比大小,也可以顺序循环
}
}
}
int m;//项数
if (d == 0){
m = n;
}else {
m = (a[n-1] - a[0])/d + 1;
}
System.out.println(m);
}
}