代码改变世界

蓝桥杯[十一届][B组]-等差数列

2022-03-31 23:23  幻霞  阅读(28)  评论(0编辑  收藏  举报

 

 

 题目比较简单,但是考察一些数学知识。

#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int num[100005]={0};
int cmp(const void* a,const void* b){
    return *(int*)a-*(int*)b;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(0);
    int n;
    cin>>n;
    
    for(int i=0;i<n;i++){
        cin>>num[i];
    }
    qsort(num,n,sizeof(int),cmp);
    int minv=num[0],maxv=num[n-1],mind=maxv;
    for(int i=1;i<n;i++){
        mind=min(mind,num[i]-num[i-1]);
    }
    if(mind==0) cout<<n;
    else
    cout<<(maxv-minv)/mind + 1;    
    return 0;
}

思路:排个序,算出最大最小值,然后再得到排序数组的最小邻差(即最小公差)

如果最小公差为0,即为常数列,那值便就是n,如果不为一,那就有等差数列求项数和(max-min)/d   + 1

这里写了一个stdlib库中的快排算法,还有cmp比较函数的定义,以后会经常用到,不妨记一下或再看一下。