[java]10元买汽水,2个瓶子换一瓶,4个盖子换一瓶,最多能喝多少瓶

本文探讨了使用瓶子和瓶盖兑换饮料的问题,通过两种方法实现:非递归的循环算法和递归算法。非递归方法使用while循环来处理瓶子和瓶盖的消耗,递归方法则通过不断调用自身来累计兑换总数。
public static void main(String[] args) {
        System.out.println(buyWater(10));
    }
    static int buyWater(int money){ 
      //非递归
int count=money/2; int bo=count; int cap=count; while(bo>=2||cap>=4){ while(bo>=2){ count++; //换一瓶,获得一个瓶子,扣除两个瓶子 bo=bo+1-2; cap++; } while(cap>=4){ count++; //换一瓶,获得一个瓶盖,扣除4个瓶盖 cap=cap+1-4; bo++; } } return count; }

 

 最后结果:15瓶

总结:要用while循环把瓶子盖子消耗完,单步调试发现,不够15瓶的情况都是没有消耗完瓶子盖子。


 

下面是递归方式:

int total=10/2;
buyWater1(total,total,total);
static void buyWater1(int total,int c,int b){
        //递归
        int water=total,cap=c,bo=b;
        
        int newWater=cap/4+bo/2;
        
        cap=newWater+cap%4;
        bo=newWater+bo%2;
        
        water+=newWater;
        
        if(cap<4&&bo<2){
            System.out.println(water);
        }
        else{
            //传water是为了累加
            buyWater1(water,cap,bo);
        }
        
    }

 

转载于:https://www.cnblogs.com/findlisa/p/11436648.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值