一、先看原题:


二、题目解析
1、📖 故事背景
小杨在玩一个游戏 👦🎮
规则是这样的:
1️⃣ 每走 1 公里 → 得 1 点能量
2️⃣ 每走 X 公里 → 额外奖励 1 点能量
就像这样👇
-
第 1 公里:+1
-
第 2 公里:+1
-
如果 X = 2
-
第 2 公里再 +1 🎉
-
第 4 公里再 +1 🎉
-
👉 老师问我们:
小杨一共走了 N 公里,他最后能拿多少能量?
2、🧠 先不用代码,用小脑袋想
假设:
-
走了 5 公里
-
每 2 公里奖励一次
我们一公里一公里数 👣
| 公里数 | 基础能量 | 奖励 | 总能量 |
|---|---|---|---|
| 1 | +1 | × | 1 |
| 2 | +1 | +1 | 3 |
| 3 | +1 | × | 4 |
| 4 | +1 | +1 | 6 |
| 5 | +1 | × | 7 |
👉 答案:7
📌 你发现了吗?
-
每一公里都要加 1
-
如果公里数能被 X 整除,再多加 1
3、🧩 把问题拆成程序步骤
🧱 程序要做的事
1️⃣ 读入测试次数 T
2️⃣ 对每一组:
-
输入 N(公里)
-
输入 X(奖励间隔)
3️⃣ 从 1 跑到 N:
-
每次 +1
-
如果
i % X == 0→ 再 +1
4、💻 参考程序
cpp
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t; // 有几组测试
while (t--) {
int n, x;
cin >> n >> x; // n 公里,x 公里一奖励
int ans = 0; // 能量总数
for (int i = 1; i <= n; i++) {
ans += 1; // 每走 1 公里,基础能量 +1
if (i % x == 0) // 如果是奖励公里
ans += 1; // 再奖励 1 点
}
cout << ans << endl;
}
return 0;
}
5、🔍 逐行讲解
cpp
int t;
cin >> t;
👉 一共要算 几次游戏
cpp
while (t--)
👉 每一组游戏都要算一次
cpp
int n, x;
cin >> n >> x;
👉
-
n:走了多少公里 -
x:每几公里奖励
cpp
int ans = 0;
👉 准备一个"小箱子",装能量 ⚡
cpp
for (int i = 1; i <= n; i++)
👉 从第 1 公里,一直走到第 n 公里
python
ans += 1;
👉 不管怎样,走路就有能量
cpp
if (i % x == 0)
ans += 1;
👉 如果是奖励点(能整除),多给一颗 🌟
6、🎉 本题要点:
-
for 循环怎么"数路程"
-
%取余判断"是不是奖励点" -
把生活问题变成程序逻辑