zoukankan      html  css  js  c++  java
  • 1-算法题之空瓶子换水喝

    /**
    * 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,
    * 她最多可以换多少瓶汽水喝?”答案是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 }
  • 相关阅读:
    hdu1875(最小生成树prime)
    hdu1839(最小生成树)
    poj2739(尺取法+质数筛)
    poj2100(尺取法)
    codeforces-div2-449-B
    gym-101350M
    gym-10135I
    gym-101350H
    gym-101350D
    hdu 5569
  • 原文地址:https://www.cnblogs.com/sun-/p/12676484.html
Copyright © 2011-2022 走看看