递归——瓶盖换酒问题

啤酒两元一瓶,两个空瓶换一瓶,四个盖子换一瓶
问:10元可以买几瓶?

分析:第一次购买完啤酒后,将拥有的盖子和瓶子转换成钱,递归购买

public class BeerProblem {
    
    
    public static int allBeerNum;//记录购买的啤酒总数
    public static int lastPingZiNum;//记录瓶子剩余
    public static int lastGaiZiNum;//记录盖子剩余

    public static void main(String[] args) {
    
    
        buyBeer(10);
        System.out.println("可以买:"+allBeerNum+"瓶,剩余瓶子数:"+lastPingZiNum+",剩余盖子数:"+lastGaiZiNum);
    }
    public static void buyBeer(int money){
    
    
        //购买啤酒
        int number =money/2;
        allBeerNum +=number;

        //计算出当前拥有的瓶子盖子数
        int currentPingZiNum = lastPingZiNum + number;
        int currentGaiZiNum = lastGaiZiNum + number;

        //将瓶子换成钱
        int total =0;
        total +=(currentPingZiNum/2)*2;
        lastPingZiNum = currentPingZiNum %2;

        //将盖子换成钱
        total += (currentGaiZiNum/4)*2;
        lastGaiZiNum =currentGaiZiNum % 4;

        //拿瓶子和盖子换酒
        if (total >=2)
            buyBeer(total);
    }
}

猜你喜欢

转载自blog.csdn.net/Supreme7/article/details/107323490