蓝桥真题:等差数列(数论)

正文

题目描述

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

输入格式
  输入的第一行包含一个整数 N。
  第二行包含 N 个整数 A₁, A₂, · · · , AN。(注意 A₁ ∼ AN 并不一定是按等差数列中的顺序给出)
输出格式
  输出一个整数表示答案。
样例输入
5
2 6 4 10 20
样例输出
10
样例说明
  包含 2641020 的最短的等差数列是 2468101214161820

题目思路及代码

思路:给你n个数,是某个等差数列的一部分,问该等差数列最小有几项?:( ( 最 大 数 − 最 小 数 ) / d ) + 1 ,其中d是该等差数列所有(所有已知数与最小数差值)的最大公因数,还要特别考虑如果d = 0的时候,就是n
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e6+10;
ll n;
ll a[maxn];
ll d[maxn];
ll gcd(ll a,ll b){
    
    
    return b?gcd(b,a%b):a;
}
int main(){
    
    
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	ll ans=a[2]-a[1];
    if(ans==0){
    
    
        cout<<n;
        return 0;
    }
    for(int i=3;i<=n;i++){
    
    
        ans=gcd((ll)(a[i]-a[i-1]),ans);
    }
    ll cnt=(a[n]-a[1])/ans+1;
    cout<<cnt;
	return 0;
}

结语


“遇事不决可问春风,春风不语即随本心”的意思是:对一件事犹豫不决,就问春风该如何做,春风给不出答案,就凭自己本心做出决断。“遇事不决可问春风,春风不语即随本心”一句出自网络作家“烽火戏诸侯”的《剑来》,其原文是:“遇事不决,可问春风。春风不语,遵循己心”。

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_46627433/article/details/123979099