瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
package com.ftl;
import java.util.Scanner;
public class Water {
public static void main(String[] args) {
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
Scanner scanner=new Scanner(System.in);
System.out.println("请输入钱数:");
int money = scanner.nextInt();
int number=0;
int cap=0;
int water=0;
Water wat=new Water();
int water2 = wat.water(money, number, cap, water);
System.out.println(money+"元钱能买"+water2+"瓶汽水!");
scanner.close();
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
public int water(int money,int number,int cap,int water) {
water+=money;
cap+=water;
number+=water;
water=0;
money=0;
if (cap<3) {
return number;
}else {
return water(money,number,cap%3,cap/3);
}
}
}
控制台打印结果:
问题进阶:1块钱买一瓶水,三个瓶盖是换一瓶汽水,两个汽水瓶换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
package com.ftl;
import java.util.Scanner;
public class Water {
public static void main(String[] args) {
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
Scanner scanner=new Scanner(System.in);
System.out.println("请输入钱数:");
int money = scanner.nextInt();
int number=0;
int cap=0;
int water=0;
int bottle=0;
Water wat=new Water();
int num1 = wat.water(money, number, cap, water);
System.out.println(money+"元钱能买"+num1+"瓶汽水!");
System.out.println("********************");
int num2 = wat.water1(money, number, cap, water,bottle);
System.out.println(money+"元钱能买"+num2+"瓶汽水!");
scanner.close();
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
public int water(int money,int number,int cap,int water) {
water+=money;
cap+=water;
number+=water;
water=0;
money=0;
if (cap<3) {
System.out.println("剩余"+cap+"个瓶盖");
return number;
}else {
return water(money,number,cap%3,cap/3);
}
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,两个汽水瓶换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
public int water1(int money, int number, int cap, int water,int bottle) {
water += money;
cap += water;
bottle+=water;
number += water;
water = 0;
money = 0;
if (cap < 3&&bottle<2) {
System.out.println("剩余"+bottle+"个汽水瓶和"+cap+"个瓶盖");
return number;
} else {
return water1(money, number, cap%3, cap/3+bottle/2,bottle%2);
}
}
}
控制台打印结果:
问题进阶:能够借汽水瓶和瓶盖
package com.ftl;
import java.util.Scanner;
public class Water {
public static void main(String[] args) {
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
Scanner scanner = new Scanner(System.in);
System.out.println("请输入钱数:");
int money = scanner.nextInt();
int number = 0;
int cap = 0;
int water = 0;
int bottle = 0;
Water wat = new Water();
int num = wat.water(money, number, cap, water);
System.out.println(money + "元钱能买" + num + "瓶汽水!(不能借)");
System.out.println("********************");
int num1 = wat.water1(money, number, cap, water, bottle);
System.out.println(money + "元钱能买" + num1 + "瓶汽水!(不能借)");
System.out.println("********************");
int num2 = wat.water2(money, number, cap, water);
System.out.println(money + "元钱能买" + num2 + "瓶汽水!(能借)");
System.out.println("********************");
int num3 = wat.water3(money, number, cap, water, bottle);
System.out.println(money + "元钱能买" + num3 + "瓶汽水!(能借)");
scanner.close();
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
public int water(int money, int number, int cap, int water) {
water += money;
cap += water;
number += water;
water = 0;
money = 0;
if (cap < 3) {
System.out.println("剩余" + cap + "个瓶盖");
return number;
} else {
return water(money, number, cap % 3, cap / 3);
}
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,两个汽水瓶换一瓶汽水,问20块钱能买 多少瓶汽水(不能借)
public int water1(int money, int number, int cap, int water, int bottle) {
water += money;
cap += water;
bottle += water;
number += water;
water = 0;
money = 0;
if (cap < 3 && bottle < 2) {
System.out.println("剩余" + bottle + "个汽水瓶和" + cap + "个瓶盖");
return number;
} else {
return water1(money, number, cap % 3, cap / 3 + bottle / 2, bottle % 2);
}
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,问20块钱能买 多少瓶汽水(能借)
public int water2(int money, int number, int cap, int water) {
water += money;
cap += water;
number += water;
water = 0;
money = 0;
if (cap < 2) {
System.out.println("剩余" + cap + "个瓶盖");
return number;
} else {
if (cap == 2) {
System.out.println("剩余" + 0 + "个瓶盖");
return number + 1;
}
return water2(money, number, cap % 3, cap / 3);
}
}
// 瓶盖递归 1块钱买一瓶水,三个瓶盖是换一瓶汽水,两个汽水瓶换一瓶汽水,问20块钱能买 多少瓶汽水(能借)
public int water3(int money, int number, int cap, int water, int bottle) {
water += money;
cap += water;
bottle += water;
number += water;
water = 0;
money = 0;
if (cap < 3 && bottle < 2) {
while(cap < 3 && bottle < 2) {
//
if (bottle==1&&cap==2) {
number++;
number++;
bottle=1;
cap=1;
}
//
if (bottle==0&&cap==2) {
number++;
cap=0;
bottle=1;
}
//
if(bottle==1&&cap==0) {
number++;
cap=1;
bottle=0;
}
//
if(bottle==1&&cap==1) {
number++;
cap=2;
bottle=0;
}
//
if(bottle==0&&cap==1) {
number++;
number++;
cap=0;
bottle=0;
}
if (bottle==0&&cap==0) {
System.out.println("剩余" + bottle + "个汽水瓶和" + cap + "个瓶盖");
return number;
}
}
} else {
return water3(money, number, cap % 3, cap / 3 + bottle / 2, bottle % 2);
}
return 0;
}
}
控制台打印结果:
能借的情况下只需要所持有的价值大于汽水的价值就可以兑换
1.只有瓶盖能兑换的情况: cap=1/3, water=2/3
number=money/water=20/(2/3)=30
2.瓶盖和瓶子都能兑换的情况: cap=1/3, bottle=1/2, water=1/6
number=money/water=20/(1/6)=120