background image

Java 基础流程控制综合示例

5.6.1.3 喝汽水问题
问题:共有 1000 瓶汽水,每喝完后一瓶得到的一个空瓶子,每 3 个空瓶子又能换 1 瓶
汽水,喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩余多少个空瓶子?
这个问题其实是个比较典型的递推问题,每 3 个空瓶都可以再换 1 瓶新的汽水,这样一
直递推下去,直到最后不能换到汽水为止。
第一种思路:每次喝一瓶,每有三个空瓶子就去换一瓶新的汽水,直到最后没有汽水可
以喝为止。在程序中记忆汽水的数量和空瓶子的数量即可。
则实现的代码如下:
int num = 1000; //汽水数量
int drinkNum = 0; //喝掉的汽水数量
int emptyNum = 0; //空瓶子的数量
while(num > 0){ //有汽水可以喝
num--; //喝掉一瓶
emptyNum++; //空瓶子数量增加 1
drinkNum++; //喝掉的汽水数量增加 1
if(emptyNum == 3){ //有 3 个空瓶子,则去换
num++; //汽水数量增加 1
emptyNum = 0; //空瓶子数量清零
}
}
System.out.println(“

” 

总共喝掉瓶数: + drinkNum);

System.out.println(“

” 

剩余空瓶子数: + emptyNum);

执行该程序,输出结果如下:
总共喝掉瓶数:1499
剩余空瓶子数:2
在该代码中,每次循环喝掉一瓶汽水,则汽水数量减少 1,空瓶子数增加 1,喝掉的总
汽水瓶数增加 1,每次判断空瓶子的数量是否达到 3,如果达到 3 则换 1 瓶汽水,同时
空瓶子的数量变为零。这种思路比较直观,但是循环的次数比较多,所以就有了下面的逻
辑实现。
第二种思路:一次把所有的汽水喝完,获得所有的空瓶子,再全部换成汽水,然后再一
次全部喝完,再获得所有的空瓶子,依次类推,直到没有汽水可喝为止。
则实现的代码如下:
int num = 1000; //汽水数量
int drinkNum = 0; //喝掉的汽水数量
int emptyNum = 0; //空瓶子的数量
while(num > 0){ //有汽水可以喝
drinkNum += num; //喝掉所有的汽水