等差數列
題目
數學老師給小明出了一道等差數列求和的題目。
但是粗心的小明忘記了一部分的數列,只記得其中 N 個整數。
現在給出這 N 個整數,小明想知道包含這 N 個整數的最短的等差數列有幾項?
輸入格式
輸入的第一行包含一個整數 N。
第二行包含 N 個整數 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 並不一定是按等差數
列中的順序給出)
輸出格式
輸出一個整數表示答案。
數據範圍
輸入樣例
5
2 6 4 10 20
輸出樣例
10
題解
思路
- 首先進行排序
- 其次選取所有相鄰兩數之差的最大公因數作爲公差
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 20, MAX = 0x3f3f3f3f;
int n, a[N];
int get(int x, int y) {
return x ? get(y % x, x) : y;
}
int main () {
cin >> n;
int minv = MAX, maxv = -MAX;
for (int i = 0; i < n; i ++) cin >> a[i];
sort(a, a + n);
int minl = -1;
for (int i = 0; i + 1 < n; i ++)
if (minl == -1)
minl = a[i+1] - a[i];
else
minl = get(min(minl, a[i+1]-a[i]), max(minl, a[i+1]-a[i]));
if (minl == 0) cout << n;
else cout << (a[n-1] - a[0]) / minl + 1;
return 0;
}