假设我们手上有20元,现在我们想喝汽水,老板说一瓶汽水一元,并且两个空瓶子可以再换一瓶汽水.
那么我们最多可以喝多少瓶汽水呢?
首先我们将思路理清
手上有20元,也就说我们一开始可以喝20瓶汽水
将20瓶汽水喝光,我们手上会有20个空瓶子,可以再换10瓶汽水
全部喝光有10个空瓶子,再换5瓶汽水
喝完有5个瓶子,可以换2瓶汽水
此时我们的手头有2瓶汽水,1个空瓶子
喝完汽水,我们又可以换一瓶
这个时候,手上是一瓶汽水,一个空瓶子
喝完我们又有两个空瓶子又可以换一瓶
至此,达到喝汽水瓶数最大值,也就是20 + 10 + 5 + 2 + 1 + 1 = 39瓶.
理清这个思路,来看完整代码
#include <stdio.h>
#include <stdlib.h>
int main(){
int money;
int empty;
int count;
printf("请输入现金数目: ");
scanf("%d",&money); //输入我们手上有的现金数()
empty = money; //用empty表示空瓶子的数目
count = money; //用count来表示我们可以喝的瓶数
一开始空瓶子和可以喝汽水的瓶数的初值都与现金数相同
while (empty >= 2){ //只要空瓶子的数目大于等于2,就可以拿去跟老板换汽水,也就是进入循环
count = count + empty / 2; //可以喝的汽水数目就是现金买到的和瓶子交换的
empty = empty / 2 + empty % 2; //若空瓶数目为2的倍数,除以2就是空瓶数目,否则要再模2(是2的倍数时,模2即为0)
}
printf("可以喝%d瓶汽水!\n",count);
system("pause");
return 0;
}