小学数学-两个瓶子倒水问题(Java实现)

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));
   }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值