2017-01-16 5 views
0

私は、再帰アルゴリズムを使用して、船員、サル、ココナッツの問題を解決しようとしています。私は与えられた値で問題を解決することができれば、私のプログラムが本当か偽かを言いたい。要するに、問題は、島に猿とココナッツが詰まっている船員がいるということです。一晩中、一人の船員が目を覚まし、ココナッツを取り出して、猿のために残されたココナッツを1本も持って、杭のように並べ替えます。船員は次に杭の1つを埋め、残りの2つの杭を戻します。次の船乗りが目を覚まし、同じことをする(猿のために残っているものと杭を作り、杭の一つを埋め、そして他の杭を戻す)。再帰的ブールメソッドの難易度

私はまた、2人の船員が7個のココナッツを必要とし、3人の船員が79個のココナッツを必要とし、4人のセーラーが1021個のココナッツを必要とすることも知っています。

私のベースケースに問題があります。例えば私が4人のセーラーと81ココナッツを持っている場合、私のプログラムは4%81 = 1であると言います。しかし、この例ではセカンドセーラーがココナッツを分別してしまうと、分別するのに十分ではありません。

何か助力や提案をいただければ幸いです。どうもありがとうございます!

public class test2 { 

     public static void main(String[] args) { 
      int sailors=4, sailorsRemaining=sailors, coconuts=81; 
      testCoconuts(sailors, sailorsRemaining, coconuts); 

     }//end main method 

     public static boolean testCoconuts(int sailors, int sailorsRemaining, int coconutsRemaining){ 
      int s = sailors; 
      int sr = sailorsRemaining; 
      int cr = coconutsRemaining; 

      if (cr%s==1 && sr==0) { //if there are enough coconuts to sort, but no sailors 
       System.out.println("false1"); 
       return false; 
      } 

      else if (cr%s==1 && sr!=0) { //if there are enough coconuts and enough sailors to sort 
      System.out.print("true1"); 
      return true; 
      } 

     if (cr%s!=1) { //if there are not enough coconuts to sort 
      System.out.println("false2"); 
      return false; 
     } 
     else return testCoconuts(s, cr - ((cr-1)/s)-1, sr-1); //recursive step 
    } 

}//end class 
+0

私はなぜ最初の船乗りが埋葬するために1枚のパイルを持ち、2枚のパイルを組み合わせるのか分からない。私は杭のように思っていたと思った。 –

+0

サルはココナッツ1本またはパイル1本を手に入れますか? –

+1

私はデバッガを使うか、コードをデバッグするために 'System.out.println()'ステートメントを追加することをお勧めします。 –

答えて

0

あなたの方法は、(船員、残りの船員、ココナッツ数)になりますが、あなたの復帰方法は、(船員、ココナッツ・カウント、残りの船員)を送信します。あなたは注文を入れ替えた。まだそれを修正していない。私はif文を書き換えて、今はうまくいくと思います。私は次のように答えることによってそれを行いました:

  1. 再帰を止めて真を返すことができるなら、どの基準を満たさなければなりませんか?
  2. 再帰を続けるには、どの基準を満たす必要がありますか?

これら2つにお答えください。完了するのは簡単です。デバッグは私のためにそれを解決する鍵でした。