逐天求校内与妈妈安排课时之和,边走边更新最大总课时及对应天数;最大值严格超过 8 时输出该天编号,否则输出 0。
OJ: roj
题目 ID: 3528
难度:入门
标签:入门模拟最值python
创建: 2026-10-02 05:51
更新: 2026-10-06 13:02
题目描述
津津每天除了校内上课,还要上妈妈安排的复习班。若一天上课超过 8 小时她就会不高兴,上课越久越不高兴。输入 7 行,依次表示周一到周日,每行两个小于 10 的非负整数,分别为校内课时与妈妈安排的课时;输出最不高兴的那天编号(周一为 1……周日为 7),若没有任何一天超过 8 小时则输出 0,若多天并列则输出最靠前的一天。样例输入依次是 5 3、6 2、7 2、5 3、5 4、0 4、0 6,输出 3。
思路
逐天把两个数相加得到当天总课时,边走边更新「最大总课时」和「对应天数」;只在严格大于当前最大值时更新,并列时就会自然保留最靠前的一天。读完后若最大值超过 8 就输出记录的天数,否则输出 0。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-10-02 05:52
# update_at: 2026-10-02 05:52
import sys
DAYS = 7 # 周一到周日共 7 天
LIMIT = 8 # 一天上课恰好 8 小时还不算,超过 8 小时才不高兴
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
loads = [next(data) + next(data) for _ in range(DAYS)] # 每天的总课时(校内 + 妈妈安排)
worst = max(loads)
# list.index 取首个最大值,天然满足"同分时输出时间最靠前的一天"
print(loads.index(worst) + 1 if worst > LIMIT else 0)
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-06 13:02
* update_at: 2026-10-06 13:02
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int DAYS = 7; // 周一到周日共 7 天
const ll LIMIT = 8; // 恰好 8 小时仍算高兴,严格超过 8 小时才不高兴
ll a[DAYS + 1]; // a[i] 表示第 i 天在校上课的小时数
ll b[DAYS + 1]; // b[i] 表示第 i 天妈妈安排的课时数
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
for (int i = 1; i <= DAYS; i++) {
cin >> a[i] >> b[i];
}
// 求一天的最大总课时;平局时保留最早出现的那天,满足“输出时间最靠前的一天”。
ll max_load = -1;
int worst_day = 0;
for (int i = 1; i <= DAYS; i++) {
ll load = a[i] + b[i];
if (load > max_load) {
max_load = load;
worst_day = i;
}
}
if (max_load > LIMIT) {
cout << worst_day << endl;
} else {
cout << 0 << endl;
}
return 0;
}