原题链接:蓝桥杯2019年第十届省赛真题-等差数列
gcd(最小公约数)要记住(我是菜鸡,差点把冒号前后写错了)
思路:用sort排序,然后依次从大到小求相邻数的差值,然后求这些差值的最大公约数,就是最大的公差
(一定要注意不存在最大公约数的情况,即存在两个数相等,此时应输出n的值)
参考代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<cmath> #include<vector> #include<set> #include<sstream> #include<cstring> #include<utility> using namespace std; typedef long long ll; typedef long l; const int N=100010; int n; int a[N],b[N]; void read(int &x){ int f=1;x=0;char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } x=x*f; } int gcd(int x,int y){ return y==0?x:gcd(y,x%y); } int main(){ scanf("%d",&n); for(int i=0;i<n;i++)read(a[i]); sort(a,a+n); int x,ok=1; for(int i=0;i<n-1;i++){ b[i]=a[i+1]-a[i]; if(b[i]==0){ ok=0;break; } if(i>0){ if(i==1)x=gcd(b[0],b[1]); else{ int y=gcd(b[i-1],b[i]); x=gcd(x,y); } } } if(ok==0)cout<<n; else cout<<(a[n-1]-a[0])/x+1; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复