喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
我是这么理解的 :首先你有20元钱,
保底能喝20瓶汽水,这时候你手里就有20个空瓶子。
20个空瓶子又能换10瓶汽水,此时你手里就有10个空瓶子。
10个空瓶子又能换5瓶汽水,此时你手里就有5个空瓶子。
5个空瓶子又能换2瓶汽水,此时你手里就有2+1=3个空瓶子。
3个空瓶子又能换1瓶汽水,此时你手里就有1+1=2个空瓶子。
2个空瓶子又能换1瓶汽水,此时你手里就有1个空瓶子。
也就是说只要你手里的空瓶子数大于1,就能接着喝。下面我们代码实现以下:
#include <stdio.h>
#include <windows.h>
#include <assert.h>
int drink_water(int money)
{
assert(money);
int bottle = money;
int empty = money;
while(empty > 1) //你手里的空瓶子数大于1,表明你还可以继续喝
{
bottle += empty / 2; //两个空瓶子可以换一瓶汽水
empty = empty / 2 + empty % 2; //空瓶子现在是换了之后的瓶子和剩下的空瓶子之和
}
return bottle;
}
int main()
{
int money = 0;
printf("请输入总金额>") ;
scanf("%d",&money);
printf("最多能喝 %d 瓶!
",drink_water(money));
system("pause");
return 0;
}
可以发现,不管你有多钱,喝完之后手里还有一个空瓶子,教你个小方法可以让你再喝一瓶:
你可以向商店老板借一个空瓶子并说等会还你,这时候你手里就有两个空瓶子了,可以去换一瓶汽水,
喝完就有一个空瓶子了,然后再还给老板,这时候你总共就喝了2*money瓶汽水了。(前提是老板愿意借你一个)