解题思路:
给你n个数,是某个等差数列的一部分,问该等差数列最小有几项?:((最大数−最小数)/d)+1((最大数-最小数)/d)+1((最大数−最小数)/d)+1,其中d是该等差数列所有(所有已知数与最小数差值)的最大公因数,还要特别考虑如果d = 0的时候,就是n
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int a[N];int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}int main() {int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];sort(a, a + n);int d = 0;for (int i = 1; i < n; i++) {d = gcd(d, a[i] - a[0]);}if (!d)cout <<n << endl;else{cout<<(a[n-1]-a[0])/d+1<<endl;}return 0;
}