Java 量水问题

题目描述

题目背景

有两个无刻度的量杯AB,其容积分别为m升和n(m>n),现在允许用量杯从水缸里取水或将水倒回水缸里,而且两个量杯中的水也可以相互倾倒,试设计计算机程序求出在m升的量杯中准确量得k(k所需的最少操作步数。 (每一个取水或倒水都算一个操作步数),如果认为量不出K升的话,返回-1

接口

int MinSteps(int m,int nint k)

规格

k

举例

1、例如输入321,返回2

2、例如输入数4,3,2,返回6

3、例如输入数5,3,2,返回2

输入

3,2,1

 

输出

2

 

样例输入

4,3,2

样例输出

6

提示

地区

南京研究所

产品线

公共

阶段

招聘

难度

2

 

public int MinSteps(int m,int n,int k){
		int step=0;
		Stack stackM=new Stack();
		Stack stackN=new Stack();
		while(stackM.size()!=m){//量杯m倒满水
			stackM.push(1);
		}
		step++;
		while(stackN.size()!=n){//量杯n倒满水
			stackN.push(stackM.pop());
		}
		step++;
		if(stackM.size()==k){//判断量杯m剩余水的升数是否等于所要的k
			return step;
		}else{
			stackN.clear();//倒掉量杯n中的水
			step++;
			boolean f1=true;
			while(f1){
				while(!stackM.isEmpty()&&stackN.size()<=n){
					if(stackN.size()==n){
						if(stackM.size()==k){
							return step+1;
						}else{
							step++;
							stackN.clear();
							step++;
							f1=true;
						}
					}
					stackN.push(stackM.pop());
				}
				step++;
				if(stackM.isEmpty()){
					while(stackM.size()


 

你可能感兴趣的:(华为校园招聘机试题)