等差数列

  1. 题目:
    数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
    现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

  2. 解题思路:
    按要求输入,将n个数据存放在数组中,使用sort函数排列数据,并计算等差数列的公差,根据求项数的公式可知,
    要使项数最少,公差应最大。循环求取最大公差,当公差不为0时,输出项数,否则,输出n。

  3. 代码:

点击查看代码
#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;
}

posted @ 2022-03-01 00:26  自然力  阅读(236)  评论(0)    收藏  举报