问题描述
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。
题目分析
以20瓶为例
第一步: 喝了20瓶(drink=20),已经喝了(dron=20k);剩余20个瓶子(num_bot=20);
第二步: 用20个瓶子去换10瓶饮料(drink=10),(num_bot=0),此时已经喝了
30瓶(dronk=dronk+drink);此时剩余瓶子10个(num_bot=num_bot+drink);
第三步: 用剩下的10个瓶子去换5瓶汽水(drink=5)(dronk=dronk+drink=35),
此时剩余瓶子数:num_bot=5;
第四步:用5个瓶子换2瓶可乐(drink=2)(dronk=dronk+drink=37)
还剩一个瓶子;此时剩余瓶子数应为,剩下的加上喝完的(num_bot=1+2=3)(注意)
**第五步:**剩下的瓶子换一瓶还剩一个空瓶(num_bot=1)(drink=1)(dronk=1+37=38)
,此时剩余瓶子为 num_bot=喝完剩下的+ 5换2剩下的 (num_bot=1+1=0)
第六步用剩下的两个瓶子换一瓶此时drink=1;dronk=38+1=39;
注意在剩余瓶数为单数时,会剩下一个瓶子,需要将其保留到,直到出现下一个落单的瓶
子为止
代码实现
#include<stdio.h>
#include<Windows.h>
int main() {
int money = 3; //money
int drink = 0; //本次喝了的
int dronk = 0; //已经喝了
int num_bot = 0; //现在的瓶子数
drink = money; //初始化为money/价格,此处价格为1
while (drink>0) { //当drink<=0时结束循环
dronk += drink; //计算喝过的数量
num_bot+=drink;
drink = num_bot / 2;
num_bot %= 2;
}
printf("%d\n", dronk);
system("pause");
return 0;
}