题目描述
集齐3个瓶盖即可兑换一瓶饮料,,初始为n瓶饮料,问最后总共喝到多少瓶饮料
算法1(模拟)
C++ 代码
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int res = n;
while (n >= 3)
{
res += n / 3; // res += [当前可兑换的瓶数]
n = n / 3 + n % 3; //n = [当前可兑换的瓶数] + [兑换后剩余的瓶数]
}
cout << res << endl;
return 0;
}
算法2(数学公式)
当有3个空瓶时,可以兑换1瓶饮料,这时已经喝的饮料+1, 剩余空瓶为1
当有4个空瓶时,可以兑换1瓶饮料,这时已经喝的饮料+1, 剩余空瓶为2
当有5个空瓶时,可以兑换2瓶饮料,这是已经喝的饮料+2, 剩余空瓶为1
总空瓶里面,用1个瓶子来装兑换后的酒,每次兑换消耗2个空瓶。
每次兑换消耗3个空瓶,兑换1瓶饮料,又补充了1个空瓶,所以理解为每次兑换消耗2个空瓶、
(这个前提是空瓶的剩余数量 >= 3,也就是说如果空瓶数量为2时,不满足兑换条件。)
=> 总共n个空瓶, 拿出1个空瓶, 剩下的 n-1 个空瓶用来兑换, 每次兑换消耗2个空瓶。
C++ 代码
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n + (n - 1) / 2 << endl;
return 0;
}
LC题解:https://leetcode-cn.com/problems/water-bottles/solution/wei-rao-li-lun-xiao-xue-ao-shu-ti-bu-yon-2jwe/
LC题解:https://leetcode-cn.com/problems/water-bottles/solution/zhi-xin-meng-nan-tu-jie-yi-xia-huan-jiu-keiqk/
本题是3瓶兑换,可扩展到m瓶兑换。
妙啊Orz
算法二里面的“可以理解为拥有3个空瓶,兑换需要2个空瓶,需要1个空瓶来装饮料 ”是什么意思呀
n个瓶子每m个空瓶换一瓶,参考一下leetcode的题解,感觉写的比较清楚,包括为什么使用 (n-1)/(m-1)
https://leetcode-cn.com/problems/water-bottles/solution/wei-rao-li-lun-xiao-xue-ao-shu-ti-bu-yon-2jwe/
呃,我可能表述的不清楚,我重新修改了题解,也可以参考下 LC 题解 qaq
谢谢,我写的题解可能不清楚。我把这个链接也一起添加到题解中了。
感谢感谢!!!
感谢你,好心人!!!
不客气,互学互助💪!