编程实现喝汽水问题

喝汽水,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瓶汽水了。(前提是老板愿意借你一个)
 

 

 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/xjq6898/p/7819459.html