【GESP】C++三级练习 luogu-p1567, 统计天数
GESP三级,一维数组,多层循环和分支练习,难度★✮☆☆☆。
luogu-P1567 统计天数
题目要求
题目描述
炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续 $N(1 \leq N \leq 10^6)$ 天的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入格式
第 1 行:一个整数 $N$ 。$1 \leq N \leq 10^6$
第 2 行:$N$个空格隔开的整数,表示连续 $N$ 天的最高气温。$0 \leq$ 最高气温 $\leq 10^9$ 。
输出格式
1 行:一个整数,表示最高气温一直上升的最长连续天数。
样例输入 #1
1
2
10
1 2 3 2 4 5 6 8 5 9
样例输出 #1
1
5
题目分析
解题思路
- 读取输入的天数 $N$ 和每天的最高气温数据。
- 初始化一个变量
total_max
,用于存储最高气温一直上升的最长连续天数,初始值为1。 - 如果输入的天数为1,则直接输出1,因为只有1天,最高气温一直上升的最长连续天数为1。
- 从第二天开始遍历每天的最高气温数据。
- 对于每天,如果当前天的最高气温大于上一天的最高气温,则当前最高气温一直上升的连续天数加1。
- 如果当前天的最高气温不大于上一天的最高气温,则更新最高气温一直上升的最长连续天数,并重置当前最高气温一直上升的连续天数为1。
- 遍历完毕后,更新最高气温一直上升的最长连续天数。
- 输出最高气温一直上升的最长连续天数。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cmath>
#include <iostream>
using namespace std;
int a[1000001];
int main() {
int n; // 定义一个整型变量n,用于存储输入的天数
cin >> n; // 从标准输入流中读取n的值
for (int i = 0; i < n; i++) {
cin >> a[i]; // 读取并存储每天的最高气温
}
int total_max = 1; // 初始化一个整型变量total_max,用于存储最高气温一直上升的最长连续天数,初始值为1
if (n == 1) { // 如果输入的天数为1
cout << total_max; // 直接输出1,因为只有1天,最高气温一直上升的最长连续天数为1
return 0; // 程序结束
}
int last_num = a[0]; // 初始化一个整型变量last_num,用于存储上一天的最高气温,初始值为第一天的最高气温
int cur_max = 1; // 初始化一个整型变量cur_max,用于存储当前最高气温一直上升的连续天数,初始值为1
for (int i = 1; i < n; i++) { // 从第二天开始遍历
if (a[i] > last_num) { // 如果当前天的最高气温大于上一天的最高气温
cur_max++; // 当前最高气温一直上升的连续天数加1
} else { // 如果当前天的最高气温不大于上一天的最高气温
total_max = max(total_max, cur_max); // 更新最高气温一直上升的最长连续天数
cur_max = 1; // 重置当前最高气温一直上升的连续天数为1
}
last_num = a[i]; // 更新上一天的最高气温为当前天的最高气温
}
total_max = max(total_max, cur_max); // 遍历完毕后,更新最高气温一直上升的最长连续天数
cout << total_max; // 输出最高气温一直上升的最长连续天数
return 0; // 程序结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权