乍一看思路清晰,首先对数列进行排序,然后相邻两项做差,取差的最小值作为公差;最后用有序数列的首项减去尾项除以2再加上1;即可;
然而,对于这样一组值:
4
5 7 10 16
结果不对,正确结果应该为12,于是公差应该时所有差值的最大公因数;
代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
int gcd(int a,int b)//求最大公因数的两种方法;
{
/* while(b!=0)
{
int t=a%b;
a=b;
b=t;
}
return a;*/
if(b==0) return a;
return gcd(b,a%b);
}
int a[10000];
int b[10000];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int j=0;
sort(a,a+n);
a[-1]=0;
for(int i=0;i<n;i++)
{
b[j]=a[i]-a[i-1];
j++;
}
int d,ans;
d=b[0];
for(int i=1;i<j;i++)
{
d=gcd(d,b[i]);
}
// printf("%d\n",d);
ans=((a[n-1]-a[0])/d)+1;
printf("%d\n",ans);
}
return 0;
}