【华为od刷题(C++)】HJ22 汽水瓶
我的代码:
#include<iostream>//引入标准输入输出流库,用于进行输入和输出
using namespace std;
//避免每次都写 std:: 前缀,使得程序可以直接使用 cin, cout 等int main() { //这是程序的入口,程序从这里开始执行int num, res;//num:当前输入的矿泉水瓶数量//res:计算结果,即通过兑换规则最终能喝到的矿泉水瓶数while (cin >> num && num != 0) {//循环读取输入,直到用户输入 0res = 0;while (num >= 3) {res += num / 3;//每3个矿泉水瓶可以兑换1瓶,所以加上 num / 3num = num % 3 + (num / 3);//剩余的矿泉水瓶数是: //num % 3(不能兑换的瓶数)加上通过兑换得到的新的矿泉水瓶数 num / 3}if (num == 2) res += 1;//如果在最后剩下2个矿泉水瓶,那么可以再兑换1瓶,所以 res 增加 1cout << res << endl;}return 0;
}
这段代码的核心思想是模拟一个“矿泉水瓶兑换”的过程,按照一定规则来计算最终通过矿泉水瓶交换所能获得的最大数量
假设输入为 9
:
-
第一轮兑换:
- 初始瓶数是9
- 9个瓶子能兑换 3 瓶(
9 / 3 = 3
),剩下 0 个瓶子 res = 3
,此时num = 0 + 3 = 3
-
第二轮兑换:
- 现在瓶子数是3,可以兑换1瓶水,剩下 0 个瓶子
res = 3 + 1 = 4
,此时num = 0 + 1 = 1
-
结束,因为
num < 3
,无法继续兑换
最终输出:4
思路解析:
-
问题背景:
假设你有一堆空矿泉水瓶,每三个空瓶子可以兑换一个新的矿泉水瓶,喝了这个新的矿泉水后又多了一个空瓶,继续按照这个规则进行兑换,直到空瓶不够换新的矿泉水瓶 -
程序目标:
给定初始的矿泉水瓶数量,计算最终你能够喝到多少瓶矿泉水;每次你通过交换瓶子来获得新的矿泉水瓶,直到不再能兑换为止