太自由

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

/**
* 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,
* 她最多可以换多少瓶汽水喝?”答案是5瓶,
* 方法如下:
* 先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
* 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
*/

 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个空瓶子换了若干瓶水之后,还剩多少个空瓶子,再加n/3,就是下一轮可以用来换水的空瓶子总数
38 
39         return n/3+getNum(n%3 + n/3);
40     }
41 }

 

posted on 2020-04-10 22:06  太自由  阅读(701)  评论(0编辑  收藏  举报