题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式
输入包括 7 行数据,分别表示周一到周日的日程安排。每行包括两个小于 10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
一个数字。如果不会不高兴则输出 0,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
输入输出样例
输入 #1复制
5 3 6 2 7 2 5 3 5 4 0 4 0 6
输出 #1复制
3
说明/提示
NOIP2004 普及组第 1 题
- 2021-10-27:增加一组 hack 数据
- 2022-06-05:又增加一组 hack 数据
以下是解决该问题的 C++ 代码:
#include <iostream>
using namespace std;
int main() {
int maxDay = 0; // 最不高兴的天数,初始为 0 表示不会不高兴
int maxHours = 0; // 最不高兴那天的上课总时长
// 遍历周一到周日
for (int i = 1; i <= 7; ++i) {
int schoolHours, extraHours;
cin >> schoolHours >> extraHours;
int totalHours = schoolHours + extraHours; // 计算当天上课总时长
// 如果当天上课总时长超过 8 小时且比之前最不高兴那天时长还长
if (totalHours > 8 && totalHours > maxHours) {
maxDay = i;
maxHours = totalHours;
}
}
cout << maxDay << endl;
return 0;
}
代码解释
- 变量初始化:
maxDay
用于记录最不高兴的天数,初始化为 0 表示不会不高兴;maxHours
用于记录最不高兴那天的上课总时长,初始化为 0。 - 遍历日程:使用
for
循环遍历周一到周日,每次读取当天在学校上课的时间和妈妈安排上课的时间,计算当天上课总时长。 - 判断是否不高兴:如果当天上课总时长超过 8 小时,并且比之前记录的最不高兴那天的时长还长,就更新
maxDay
和maxHours
。 - 输出结果:最后输出
maxDay
。
复杂度分析
- 时间复杂度:$O(7)$,因为只需要遍历 7 天,可看作 $O(1)$。
- 空间复杂度:$O(1)$,只使用了固定的几个变量。