题目描述
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项?
输入格式
输入的第一行包含一个整数 N。 第二行包含N个整数A1,A2,···,AN。(注意A1 ∼AN并不一定是按等差数
列中的顺序给出)
(对于所有评测用例,2≤ N ≤100000,0≤ Ai ≤109。)
输出格式
输出一个整数表示答案
样例输入
5 2 6 4 10 20
样例输出
10
参考代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {//辗转相除法求最大公因数if (b == 0)return a;elsereturn gcd(b, a%b);
}
int main()
{int n;cin >> n;vector<int> nums(n, 0);for (int i = 0; i < n; ++i) cin >> nums[i];sort(nums.begin(), nums.end());int min=nums[0],max=nums[n-1];int d=nums[1]-nums[0];//求公差for(int i=2;i<n;++i){if(nums[i]-nums[i-1]<=d)//求出最小的公差d=gcd(d,nums[i]-nums[i-1]);//更新公差}if(d==0)//特殊情况cout<<n;elsecout<<(max-min)/d+1;return 0;
}