華爲研發工程師編程題

/**
* 有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,
* 她最多能夠換多少瓶汽水喝?」答案是5瓶,
* 方法以下:
* 先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完之後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。
* 而後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完之後用3個空瓶子換一瓶滿的還給老闆。若是小張手上有n個空汽水瓶,最多能夠換多少瓶汽水喝?
*/java

 1 /**
 2 * 有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,
 3 * 她最多能夠換多少瓶汽水喝?」答案是5瓶,
 4 * 方法以下:
 5 * 先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完之後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。
 6 * 而後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完之後用3個空瓶子換一瓶滿的還給老闆。若是小張手上有n個空汽水瓶,最多能夠換多少瓶汽水喝?
 7 */import java.io.IOException;
 8 
 9 import java.util.Scanner;
10 
11 public class Main{
12     public static void main(String[] args) throws IOException {
13         Scanner sc = new  Scanner(System.in);
14         while(sc.hasNext()){
15             int n = sc.nextInt();
16             if(n>=1 && n<=100){
17                 System.out.println(getNum(n));
18             }else{
19                 break;
20             }
21         }
22     }
23 
24   //遞歸求解
25     public static int getNum(int n) {
26         if(n<1 && n>100){
27             return -1;
28         }
29         if(n == 1){
30             return 0;
31         }
32      //若是有兩個空瓶子,能夠換一瓶水
33         if(n == 2){
34             return 1;
35         }
36      // n/3獲得的是當前n個空瓶子能夠直接換取多少瓶水
37         // n%3求的是 當前n個空瓶子換了若干瓶水以後,還剩多少個空瓶子,再加3,就是下一輪能夠用來換水的空瓶子總數
38 
39         return n/3+getNum(n%3 + n/3);
40     }
41 }
相關文章
相關標籤/搜索