一个华为面试题

package com.telecom.myshiro.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 这个是用来测试一个算法的
 * 有十个空瓶子   每三个空瓶子可以换一瓶汽水  
 * 如果有两个空瓶子,可以和老板借一瓶汽水
 * 如果有n个空瓶 ,可以换多少瓶汽水
 * 
 */
public class suanfaceshi {
	
	
	int suma=0;
	/**
	 * 每三个空瓶子可以换一瓶汽水
	 * 两个空瓶子可以借一瓶,喝完再还,三个空瓶
	 */    	  
    	
	//传进去一个数,给出来这个数对3 求余的余数和这个商
	//得记录这个 数的商
	// 返回的集合里面只有两个数,一个是a+b 一个是a 
	// a+b 是进入下一次的计算, a 是拿出来做加的计算
    public  List<Integer>  doJisuan(int num){
    	List<Integer> nums=new ArrayList<Integer>();
    	  if (num>=2){
    		  int a =num/3;
    		  int b=num%3;
    		  nums.add(a+b);
    		  nums.add(a);
    		  return nums;
    	  }else{
    		  return nums;
    	  }
    }
	
	//  在这里给出一个总的空瓶数,返回最多能喝到的瓶数
	public  int test (int num){
		
		 if(num<=2){
			return 0;
		  }
		  suanfaceshi t=new suanfaceshi();
		  List<Integer> ps=new ArrayList<Integer>();
		  ps=t.doJisuan(num);
		  //如果商 和余数之和大于2则可以继续算下去
		  if(ps.get(0)>2){
			  suma+=(int)ps.get(1);
			  return test(ps.get(0));
		  }
		  // 如果还有两个空瓶子
		  if (ps.get(1)==2){
			  suma=suma+ps.get(1)+1; 
		  }
		  // 如果还有一个空瓶子
		  if(ps.get(1)==1){
			  suma+=ps.get(1);
		  }
		  return suma;
	}
	
  public static void main(String[] args) {
	  suanfaceshi t=new suanfaceshi();
	  int a= t.test(-3);
	  System.out.println(a);
	  
}

}

  

原文地址:https://www.cnblogs.com/murong/p/5201753.html