问题描述
1块钱1瓶汽水,2个空瓶可以换一瓶汽水,3个瓶盖可以换一瓶汽水,问: 20块钱可以喝多少瓶汽水?
问题分析
-
一瓶汽水1元,喝完之后有1个瓶盖和1个空瓶。
-
1个瓶盖等于1/3瓶汽水,1个空瓶等于1/2瓶汽水。
-
一元钱 = 一瓶汽水 = 可以喝的部分加上一个瓶盖加上一个空瓶 = 1+1/2+1/3瓶可以喝的汽水。
-
得到20*(1+1/2+1/3)=20+10+2/3+6=36瓶汽水+两个瓶盖。
-
但实际上要减去一瓶,否则最后一瓶汽水没有瓶子装。
算法设计
初始化
有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