等差数列
-
题目:
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项? -
解题思路:
按要求输入,将n个数据存放在数组中,使用sort函数排列数据,并计算等差数列的公差,根据求项数的公式可知,
要使项数最少,公差应最大。循环求取最大公差,当公差不为0时,输出项数,否则,输出n。 -
代码:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1); //默认从小到大排列
int d=a[2]-a[1]; //公差
for(int i=2;i<=n;i++){
d=__gcd(d,a[i]-a[i-1]); //求最大公差,公差最大,项数最少
}
if(a[1]==a[n]) cout<<n<<endl;
else{
cout<<(a[n]-a[1])/d+1<<endl; //等差数列求项数的公式:(末项--首项)/公差+1
}
return 0;
}

浙公网安备 33010602011771号