/**
* 有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,
* 她最多能夠換多少瓶汽水喝?」答案是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 }