整周贡献 5 个工作日,剩余天数用取模判断是否为周一到周五。
OJ: luogu
题目 ID: P1424
难度:入门
标签:python入门模拟取模
日期: 2026-07-15 18:12
题意
从星期 x 开始经过 n 天。小鱼周一到周五每天游 250 公里,周末休息。求总共游了多少公里。
思路
一整周有 7 天,其中 5 天游泳。先把 n 拆成完整周和剩余天数:
python
full_weeks, rest_days = divmod(n, 7)完整周贡献 full_weeks * 5 个游泳日。剩余不足一周的几天再逐天判断星期编号是否在 1..5。
brute.py 不适合这题;直接模拟最多 7 天的剩余部分已经是清晰的完整做法。
Python 知识
divmod(n, 7)同时得到完整周数和剩余天数。(x + i - 1) % 7 + 1可以把星期编号保持在1..7。weekday <= 5表示周一到周五。- 先处理完整周,再处理余数,可以避免循环
10^6次。
对应的本地 Python 笔记:
/home/rainboy/mycode/hugo-blog/content/program_language/python/math_tools.md:divmod和取模。/home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:整数输入输出。/home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:单个答案输出。
代码
python
x, n = map(int, input().split())
full_weeks, rest_days = divmod(n, 7)
work_days = full_weeks * 5
for i in range(rest_days):
weekday = (x + i - 1) % 7 + 1
if weekday <= 5:
work_days += 1
print(work_days * 250, end="")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-07-27 00:00
* update_at: 2026-07-27 00:00
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int x, n; // 起始星期几,经过天数
cin >> x >> n;
// 完整周数,每周 5 个工作日
int full_weeks = n / 7;
int rest_days = n % 7;
int work_days = full_weeks * 5;
// 剩余不足一周的天数,逐天判断是否为工作日
for (int i = 0; i < rest_days; i++) {
// 星期编号保持在 1~7
int weekday = (x + i - 1) % 7 + 1;
if (weekday <= 5) {
work_days++;
}
}
// 每天游 250 公里
cout << work_days * 250 << endl;
return 0;
}Pythonic 写法
生成器按周几:
python
x, n = map(int, input().split())
print(sum((x - 1 + i) % 7 < 5 for i in range(n)) * 250)复杂度
只循环剩余天数,最多 6 次,时间复杂度
总结
周期问题先拆完整周期,再处理剩余部分。星期编号这种循环变量,用取模可以自然绕回 1..7。