背景
在看小品的时候,看到郭哥演的《没那么简单》,想起了之前参加蓝桥杯的时候也有这么一个算法题,于是乎,闲来无事,用算法实现一下小品里面到底有多少瓶的问题
第一个规则
三个空瓶可以换一瓶
第二个规则是
三个空瓶可以换一瓶,两个瓶盖可以换一瓶
上代码
一开始写的时候,初始的瓶数是写成静态常量,后来为了方便多次测试,才用了while循环
package com.example.bottlealgorithm.demo;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.Scanner;
public class DemoApplication {
private static int totalNum = 5;//初始有的瓶数
private static int remainBottleNum =0;//剩余的空瓶数
private static int remainCapNum =0;//剩余的瓶盖数
public static void main(String[] args) {
// BottleAlgorithm( totalNum);
while(true){
Scanner scanner = new Scanner(System.in);
totalNum = Integer.valueOf(scanner.nextInt());
BottleAlgorithmRoundTwo( totalNum, totalNum);
System.out.println(totalNum);
}
}
/**
* 规则:每三个空瓶可以换一瓶水
* @param bottleNumber 瓶子总数
* @return 兑换回来的瓶子
*/
public static int BottleAlgorithm(int bottleNumber){
int retNum = bottleNumber/3;//可以换回的瓶数
totalNum += retNum;
int remainNum = bottleNumber%3;//剩余的空瓶数
if(retNum+remainNum>=3){
BottleAlgorithm(retNum+remainNum);
}
return retNum;
}
/**
* 规则:每三个空瓶可以换一瓶水,
* 在上面的基础上加一条规则:两个瓶盖可以换一瓶水
* @param bottleNumber 空瓶子总数
* @return 兑换回来的瓶子
*/
public static int BottleAlgorithmRoundTwo(int bottleNumber,int capNumber){
int retBottleNum = bottleNumber/3;//空瓶可以换回的瓶数
int retCapNum = capNumber/2;//瓶盖可以换回的瓶数
int totalRetNum = retBottleNum+retCapNum;//换回的总数
totalNum += totalRetNum;
remainBottleNum = bottleNumber%3;//剩余的空瓶数
remainCapNum = capNumber%2;//剩余的瓶盖数
if(totalRetNum+remainBottleNum>=3||totalRetNum+remainCapNum>=2){
BottleAlgorithmRoundTwo(totalRetNum+remainBottleNum,totalRetNum+remainCapNum);
}
return totalRetNum;
}
}
如果广大的网友有什么好的建议或者写法,欢迎评论区留言