import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class TestWater { //规定规定m为大杯子的容量,m为小杯子的容量,c为要倒出来水的容量,且 //c不等于m或者m public String getWater(int m,int n,int c ){ //定义两个数组用来存放每次a杯子和b杯子里面水的量 int[] a = new int[10000]; int[] b = new int[10000]; int num = 0; if(m%n==0){ return "倒不起来您想要的容量的水"; } else{ //第一次肯定是将小杯子里装满水 a[0]=0;b[0]=n; a[1]=n;b[1]=0; for(int j = 1 ;j<10000;j++){ //如果大杯子中没有水,小杯子中有水,则把小杯子中的水倒入大杯子中 if(a[j]==0&&b[j]!=0){ a[j+1]= b[j];b[j+1]=0; } //如果大杯子中的水量等于之前小杯子中的水量,则把小杯子中装满水 if(a[j]==b[j-1]&&b[j]==0){ a[j+1]= a[j];b[j+1]=n; } //如果上一步操作是小杯子装水,则这一步操作是将小杯子装的水倒入大杯子中 if(a[j]==a[j-1]&&b[j]==n){ //如果会溢出,则倒满即可 if((a[j+1]= a[j]+b[j])>m){ a[j+1]= m;b[j+1]= b[j]-(m-a[j]); } //如果不会溢出,则将小杯子中的水全部导入大杯子中 else{ a[j+1]= a[j]+b[j];b[j+1]=0; } } //如果上一步是将小杯子的水倒入大杯子中,且小杯子中还有水,则这一步则是将大杯子中的水全部倒掉 if((a[j]+b[j])==(a[j-1]+b[j-1])&&b[j]!=0){ a[j+1]= 0;b[j+1]=b[j]; } //如果上一步是将小杯子的水倒入大杯子中,且小杯子中没有水,说明大杯子没有倒满,则这一步则是将 //小杯子全部装满水 if((a[j]+b[j])==(a[j-1]+b[j-1])&&b[j]==0){ a[j+1]= a[j];b[j+1]=n; } //如果大杯子中装了C量的水而小杯子中没有水,说明倒水结束,退出,并将j+1取出作为输出数据时的上限 if(a[j]==c && b[j]==0){ num =j+1; break; } } //输出数组中保存的数据,这就是倒水的过程 for(int j = 0 ;j<num;j++){ if(!(a[j]==0&& b[j]==0)){ System.out.print("("+a[j]+","+b[j]+")->"); } //10个换行 if((j+1)%10==0&&j!=0){ System.out.println(); } } } return "Hello!"; } public static void main(String[] args) throws IOException{ System.out.println("请输入大杯子容量,小杯子容量和需要的水量,并以,分隔:"); //获取键盘输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); //对从键盘获取的字符串做分割 String[] input = s.split(","); //大杯子容量 int maxCup = Integer.parseInt(input[0]); //小杯子容量 int minCup = Integer.parseInt(input[1]); //想要的水量 int wantWater = Integer.parseInt(input[2]); TestWater tw = new TestWater(); System.out.println(tw.getWater(maxCup, minCup, wantWater)); } }
小学数学-两个瓶子倒水问题(Java实现)
最新推荐文章于 2021-03-05 04:14:49 发布