试题H 等差数列
1. 题目
输入样例:
5
2 6 4 10 20
输出样例:
10
2. 分析:
考的就是等差数列的知识,要让包含几个数的数列最短,那肯定是间隔公差大点,包含的数就少点。
下面每个数与第一个数的间隔为2、4、8、18,求这几个数的最大公约数,即公差。求最大公约数用欧几里得算法(辗转相除法)
项数n = (末项 - 首项)/ d + 1。
3.代码
#include <bits/stdc++.h> using namespace std; int a[100010]; int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int main() { int n, d = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a,a+n); //一定要排序先 for (int i = 1; i < n; i++) { d = gcd(d, a[i] - a[0]); //每项的数和第一项的数的间隔, } if (d) cout << (a[n - 1] - a[0]) / d + 1 << endl; else cout << n << endl; //如果公差是0,就是给出的数 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库