1-アルゴリズムの問題:水の空のボトル

/ **
*このようAのパズルがあります:「店の規定は:ソーダのボトルのための3つの空のペットボトルは、張ソーダボトル10空の手を持つことができます
*彼女は飲み物まで変更することができますどのように多くのソーダの瓶?」の答えです5ボトル、
*方法は次のとおりです。
*最初に、9本の空のボトルを3本のソーダに交換し、3本のフルボトルを飲み、4本の空のボトルを飲んだ後、3を別のボトルにもう一度使用し、このフルボトルを飲みます。空のボトルが2つ残っています。
*次に、ボスに最初にソーダのボトルを貸してもらい、フルボトルを飲み、空のボトル3本を使用してフルボトルをボスに置き換えます。Xiao Zhangが手にn個の空のソーダボトルを持っている場合、彼は何本のボトルを交換できますか?
* /

1  / ** 
2  *、このようなパズルがあります:「ストア状態:手持ちの10空のペットボトルを持つことができますソーダ張のボトルのための3つの空のペットボトル
 3  *彼女は飲み物まで変更することができますどのように多くのボトルソーダの? 「答えは5ボトル、
 4  *です。方法は次のとおりです
 。5  *最初に、9本の空のボトルを3本のソーダのボトルに交換し、3本のフルボトルを飲み、4本の空のボトルを飲んだ後、3本を別のボトルに使用し、これを飲みます。ボトルがいっぱいになると、2つの空のボトルが残ります。
6  *次に、ボスに最初にソーダのボトルを貸してもらい、フルボトルを飲み、3本の空のボトルを使用して、フルボトルをボスと交換します。Xiao Zhangが手に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  スキャナー(System.in);
14          while (sc.hasNext()){
 15              int n = sc.nextInt();
16              if(n> = 1 && n <= 100 ){
 17                  System.out.println(getNum(n));
18              } その他{
 19                  休憩;
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       // 空のボトルが2つある場合、水のボトルを変更できます
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 }

 

おすすめ

転載: www.cnblogs.com/sun-/p/12676484.html