1. 题目分析与解题思路
这道题目看似简单,但其中蕴含着几个需要特别注意的关键点。我们先来拆解题目要求:
小鱼的工作日是周一到周五,每天游泳250公里;周末(周六和周日)休息不游泳。给定起始星期x和天数n,需要计算n天后小鱼总共游泳的公里数。
1.1 核心问题拆解
解决这个问题的关键在于:
- 正确判断每一天是工作日还是周末
- 累加工作日的游泳距离
- 高效处理大范围的n值(题目中n可以达到10^6)
1.2 日期循环的处理技巧
最直观的做法是使用循环,逐天判断是否是工作日并累加距离。但需要注意星期的循环特性 - 星期是以7天为周期循环的。我们可以利用模运算(%)来高效处理星期的循环。
提示:当星期递增到8时,应该回到星期一。可以用x = x % 7 + 1来实现这个循环。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码实现与详细解析
2.1 基础版本实现
我们先来看题目提供的参考代码:
cpp复制#include <iostream>
using namespace std;
int main() {
int x, n;
cin >> x >> n;
int sum = 0;
for (int i = 0; i < n; i++) {
if (x <= 5) {
sum += 250;
}
x = x % 7 + 1; // 星期循环
}
cout << sum << endl;
return 0;
}
这段代码的核心逻辑是:
- 读取起始星期x和天数n
- 循环n次,每次:
- 如果是工作日(x≤5),累加250公里
- 更新星期(实现1-7循环)
- 输出总距离
2.2 代码优化与改进
虽然上面的代码可以正确解决问题,但我们可以做一些优化:
-
减少模运算次数:模运算相对耗时,当n很大时会影响性能。我们可以先计算完整周数,再处理剩余天数。
-
使用更清晰的星期判断:可以用枚举或常量定义星期,提高代码可读性。
优化后的版本:
cpp复制#include <iostream>
using namespace std;
int
