三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-p1420, 最长连号
📅 2025-01-27·✍️ OneCoder·计算中...·⏱️ 6 分钟
#GESP#C++#一维数组
GESP三级练习,一维数组、循环分支嵌套,难度★✮☆☆☆。
luogu-P1420 最长连号
题目要求
题目描述
输入长度为 的一个正整数序列,要求输出序列中最长连号的长度。
连号指在序列中,从小到大的连续自然数。
输入格式
第一行,一个整数 。
第二行, 个整数 ,之间用空格隔开。
输出格式
一个数,最长连号的个数。
样例输入 #1
CONSOLE
2 行
10
1 5 6 2 3 4 5 6 8 9
样例输出 #1
CONSOLE
1 行
5
数据规模与约定
对于 的数据,保证 ,。
题目分析
方法一
- 首先,读取输入的整数序列,存储在数组中。
- 初始化一个变量
max_serial_count来存储最长连号的长度,初始值为 1。 - 遍历数组,使用一个内部循环来检查当前数是否是上一个数加 1,如果是,则增加当前连续数列的计数
cur_serial_count。 - 如果不是,则重置
cur_serial_count为 1。 - 更新
max_serial_count为当前最大计数和cur_serial_count的最大值。 - 输出
max_serial_count的值,即最长连号的长度。
方法二
- 首先,读取输入的整数序列,存储在数组中。
- 初始化一个变量
max_serial_count来存储最长连号的长度,初始值为 1。 - 使用一个循环来遍历数组,从第二个数开始。
- 在循环中,检查当前数是否是下一个数减 1,如果是,则增加当前连续数列的计数
cur_serial_count。 - 如果不是,则重置
cur_serial_count为 1。 - 更新
max_serial_count为当前最大计数和cur_serial_count的最大值。 - 从下一个位置继续检查即可,检查过的位置不用回溯,因此一层循环足以。
- 输出
max_serial_count的值,即最长连号的长度。
示例代码
方法一代码
C++
30 行
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int n; // 输入的整数
cin >> n; // 读取输入的整数
int a[n]; // 定义一个长度为n的数组
for (int i = 0; i < n; i++) {
cin >> a[i]; // 读取数组元素
}
int max_serial_count = 1; // 初始化最大连续数列计数
for (int i = 0; i < n; i++) {
int last_num = a[i]; // 初始化上一个数
int cur_serial_count = 1; // 初始化当前连续数列计数
for (int j = i + 1; j < n; j++) {
if (a[j] == last_num + 1) {
cur_serial_count++; // 如果当前数是上一个数加1,则计数增加
} else {
cur_serial_count = 1; // 如果不是,则重置计数
}
max_serial_count = max(max_serial_count, cur_serial_count); // 更新最大计数
last_num = a[j]; // 更新上一个数
}
}
cout << max_serial_count; // 输出最大连续数列计数
return 0;
}
方法二代码
C++
24 行
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int n; // 输入的整数
cin >> n; // 读取输入的整数
int a[n]; // 定义一个长度为n的数组
for (int i = 0; i < n; i++) {
cin >> a[i]; // 读取数组元素
}
int max_serial_count = 1; // 初始化最大连续数列计数
int cur_count = 1; // 初始化当前连续数列计数
for (int i = 0; i < n; i++) {
if (a[i + 1] == a[i] + 1) {
cur_count++; // 如果当前数是上一个数加1,则计数增加
} else {
max_serial_count = max(max_serial_count, cur_count); // 更新最大计数
cur_count = 1; // 重置计数
}
}
cout << max_serial_count; // 输出最大连续数列计数
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2064, 斐波那契数列
斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B3661, [语言月赛202209] 排排队
三级知识点一维数组练习,除了应用了数组以外,其余逻辑比较简单,适合初学者。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习 luogu-B2087, 与指定数字相同的数的个数
GESP三级知识点一维数组练习,题目本身逻辑不复杂。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!