题目:啤酒2元一瓶,4个酒盖可以兑换1瓶啤酒,2个空瓶可以兑换1瓶酒,请问10元最终可以喝多少瓶酒,剩余多少个空瓶和盖子?
public class Test {
// 定义此静态成员变量来存储最终喝的酒的总数量
public static int totalNumber;
// 定义两个静态成员变量分别记录最后剩下的空瓶数以及盖子数
public static int lastBottleNumber;
public static int lastCoverNumber;
public static void main(String[] args) {
// 1、调用方法拿钱买酒
buy(10);
System.out.println("喝酒总数:" + totalNumber + "瓶");
System.out.println("剩下的盖子数:" + lastCoverNumber + "个");
System.out.println("剩下的瓶子数:" + lastBottleNumber + "瓶");
}
public static void buy(int money) {
// 2、第一次进来时的钱可以买多少瓶酒以及喝出来的空瓶子及盖子数量
int buyNumber = money / 2;
// 累加到最终喝的酒总个数
totalNumber += buyNumber;
// 3、将空瓶和盖子统计到这里,用来“换钱”
int coverNumber = lastCoverNumber + buyNumber;
int bottleNumber = lastBottleNumber + buyNumber;
// 换来的瓶子和盖子都拿来换钱
int allMoney = 0;
if (coverNumber >= 4) {
// 如果达到要求加入该分支换算成钱赋值回去
allMoney += (coverNumber / 4) * 2;
}
// 换完钱也要将剩下的盖子数量换算出来
lastCoverNumber = coverNumber % 4;
// 4、瓶子同理用来换算
if (bottleNumber >= 2) {
allMoney += (bottleNumber / 2) * 2;
}
lastBottleNumber = bottleNumber % 2;
// 5、最后如果换到的钱满足重新调用方法用换来的钱再换算,直到不满足结束递归
if (allMoney >= 2) {
buy(allMoney);
}
}
}
运行结果:
喝酒总数:15瓶
剩下的盖子数:3个
剩下的瓶子数:1瓶