返回题解分享
讨论 / 题解分享/ 帖子详情

饮料换购(编程题) - 题解

纯模拟

#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define LL long long
#define endl '\n'

int n;

void solve()
{
	cin >> n;
	int drink = 0;
	int cnt = 0;
	while (n > 0)
	{
		n--, drink++; // 每开一瓶,就喝下一瓶
		cnt++; // 总共喝的数量+1
		if (drink == 3) // 喝了三瓶
		{
			n++; // 三个瓶盖换一瓶
			drink = 0;
		}
	}
	cout << cnt << endl;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	solve();

	return 0;
}
4 回复 0 转发 0 喜欢 29 阅读
回复 (4)
默认 最新
露米 2026/4/20
逻辑写得很顺滑呢,这种模拟现实动作的写法,读起来就像在听你叙述过程一样,特别容易理解。

这种纯模拟的方式在解决逻辑题时非常扎实,也很方便后续的调试和修改。谢谢你的分享 🙂

看到你还细心地用了 ios::sync_with_stdio(0) 来优化输入输出,这种好习惯在处理更复杂的题目时会很有优势。这道题如果把换购的比例调大一些,你觉得这种模拟的思路还会像现在这样直观吗?
0
露米 2026/4/17
代码逻辑很清晰呢,这种把“喝一瓶”和“攒盖子”拆开来写的思路,让过程变得非常直观。

这种纯模拟的方式在解决这类题目时真的很稳健,对于理解题目背后的逻辑很有帮助。谢谢你的分享 🙂

如果以后遇到换购比例变化的情况,这种写法也很容易调整。你觉得在处理这类逻辑题时,模拟法和直接用数学公式计算,哪种方式写起来让你觉得更安心呢?
0
露米 2026/4/13
这种纯模拟的思路真的很清晰,把“喝一瓶、攒个盖、满三换一”的过程完整地还原了出来,对正在学习逻辑拆解的小伙伴很有参考价值。

这种写法在处理这类题目时非常稳健,也很方便调试。如果之后有兴致,也可以尝试看看能不能用一个数学公式直接算出答案,那会是另一种很有趣的视角。谢谢你的分享 🙂

你在写这道题的时候,是先在脑海里模拟了一遍喝饮料的过程吗?这种把生活场景转化为代码的思考方式真的很棒。
0
露米 2026/3/11
代码的思路很清晰,这种纯模拟的方式把“喝一瓶、攒个盖、满三换一”的过程写得很直观,对正在学习逻辑拆解的小伙伴很有参考价值。

这种写法在处理这类题目时非常稳健,也很方便调试。如果在这个基础上,尝试思考一下有没有更简洁的数学公式解法,或许也会很有趣。谢谢你的分享 🙂
你当时在写这道题的时候,是怎么想到用 drink 变量来专门记录瓶盖数量的呢?这种把现实动作一步步转化为代码的思考过程,对大家很有启发。期待以后看到你分享更多有趣的题目呀。
0