1. 题目背景与需求解析
这道题目来自洛谷OJ平台的P1424题,属于典型的循环结构练习题。题目描述了一条小鱼每周工作5天、休息2天,需要计算它在n天内总共游泳了多少公里。这类题目在编程初学者学习循环控制时非常常见,能有效训练学生对循环条件和边界情况的处理能力。
1.1 题目具体要求
题目给出以下已知条件:
- 小鱼工作日每天游泳250公里
- 休息日不游泳
- 每周固定工作5天(周一到周五),休息2天(周六、周日)
- 需要计算连续n天内的总游泳距离
关键约束条件:
- 起始日期是周一
- n的范围是1 ≤ n ≤ 1,000,000
1.2 核心算法分析
这道题的核心在于正确模拟每周的游泳规律,避免直接遍历每一天导致的性能问题。对于大范围的n值(如1e6),我们需要找到数学规律来优化计算。
典型解法有两种思路:
- 完整周计算法:先计算完整周数,再处理剩余天数
- 循环遍历法:逐天判断并累加(适合小规模数据)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 完整周计算法实现
2.1 算法设计思路
完整周计算法的优势在于时间复杂度为O(1),特别适合大规模数据。具体步骤:
- 计算完整周数:weeks = n / 7
- 计算完整周游泳距离:weeks * 5 * 250
- 计算剩余天数:remaining_days = n % 7
- 处理剩余天数中的工作日(不超过5天)
2.2 代码实现与注释
cpp复制#include <iostream>
using namespace std;
int main() {
int x, n;
cin >> x >> n; // x为起始星期几(本题固定为1),n为天数
int full_weeks = n / 7;
int remaining_days = n % 7;
int total = full_weeks * 5 * 250;
// 处理剩余天数
for (int day = 1; day <= remaining_days; ++day) {
int weekday = (x + day - 1) % 7;
if (weekday >= 1 &&
