算法1
思路:相当于最大公约数的扩展题,利用辗转相除函数,gcd,理解一下,直接当做模板背过就行
C++ 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1000010 ;
int n;
int a[N];
int gcd(int a,int b){
return b ? gcd(b,a%b):a;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&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)printf("%d\n",n);//如果每一项都一样,直接输出n
else printf("%d\n",(a[n-1]-a[0])/d+1);//否则,直接求出个数,用最大项减去最小项除以公差+1
return 0;
}