/**
* 有这样一道智力题:“某商店规定:三个空汽水瓶能够换一瓶汽水。小张手上有十个空汽水瓶,
* 她最多能够换多少瓶汽水喝?”答案是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 }