递归问题:买汽水

6 篇文章 0 订阅

问题描述


1块钱1瓶汽水,2个空瓶可以换一瓶汽水,3个瓶盖可以换一瓶汽水,问: 20块钱可以喝多少瓶汽水?

 

问题分析


  1. 一瓶汽水1元,喝完之后有1个瓶盖和1个空瓶。

  2. 1个瓶盖等于1/3瓶汽水,1个空瓶等于1/2瓶汽水。

  3. 一元钱 = 一瓶汽水 = 可以喝的部分加上一个瓶盖加上一个空瓶 = 1+1/2+1/3瓶可以喝的汽水。

  4. 得到20*(1+1/2+1/3)=20+10+2/3+6=36瓶汽水+两个瓶盖。

  5. 但实际上要减去一瓶,否则最后一瓶汽水没有瓶子装。

 

算法设计


初始化

有20元钱,money = 20;

瓶盖和空瓶为0,bottle = 0; cap = 0;

 

定义一个方法,返回值为总的瓶数。

int buyWater(int money,int bottle,int cap)

 

源代码


public class BuyWaterDemo {
	public static void main(String[] args) {
		int money = 20;
		int bottle = 0;
		int cap = 0;
		int sum = buyWater(money, bottle, cap);
		System.out.println(sum+"瓶汽水。");
	}
	public static int buyWater(int money,int bottle,int cap) {
		int num = 0;
		if(money>=1) {
			num++;
			bottle++;
			cap++;
			num += buyWater(money-1,bottle,cap);
		}else if(bottle>=2) {
			num++;
			bottle++;
			cap++;
			num += buyWater(money,bottle-2,cap);
		}else if(cap>=3) {
			num++;
			bottle++;
			cap++;
			num += buyWater(money,bottle,cap-3);
		}
			return num;	
	}
}

 

运行结果


 

总结


转载请注明出处,谢谢~ --------------------- 本文来自 Slick_kw的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_34399639/article/details/82962271

Slick_kw博客
Slick_kw博客

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值