2016-09-19 15 views
-6

私はこのコードのバグを見つけることができません。 Project Eulerが私の答えを正しくないと判断したのでなければ、私は自分のコードが正しいことを天に誓うでしょう。14 - プロジェクトオイラー - Java - 間違った答え - バグ?

私は別のアプローチを使うこともできますが、この問題はそれほど複雑ではありませんが、バグを見つけようと全滅しました。 3N + 1→→N/2 N

(nは偶数) n(nは奇数):

質問は次の反復配列は、正の整数の集合のために定義されている

上記のルールを使用し、13で始まるが、我々は以下の配列を生成する:

13→40→20→10→5→16→8→4→2→1 それは、この配列ことがわかります(開始13で終了し、1で終わる)は10項を含む。まだ証明されていませんが(Collat​​z Problem)、すべての開始数は1で終わると考えられます。

100万未満の最初の数字が最も長いチェーンを生成していますか?

私のコードは次のとおりです。

public class CollatzSequence014 { 

public static void main(String [] args){ 
    long start = System.currentTimeMillis(); 
    long maxTotal = 0; 
    long inputNum = 0; 

     for (long i = 3; i < 1000000 ; i++){ 
      long total = generateSequence(i); 
      if (total > maxTotal){ 
       inputNum = i; 
       maxTotal = total; 
      } 
     } 
    long end = System.currentTimeMillis(); 

    System.out.println("The input number was : " + inputNum + " and the total was " + maxTotal); 
    System.out.println("Time taken : " + (end - start) + "ms"); 
} 



public static long generateSequence(long n){ 
    long counter = 0; 
    long currentDigit = n; 

    while (currentDigit > 1){ 
     counter++; 
     if (n % 2 == 0){ 
      currentDigit = currentDigit/2; 
     } 
     else { 
      currentDigit = (3 * currentDigit) + 1; 
     } 
    } 
    return counter; 
} 

}

+0

あなたはどのようなエラー/出力を得ていますか?実際にはエラーがありますか、これはただ時間切れですか? – Mureinik

+2

[デバッガとは何ですか?また、どのようにして問題を診断するのに役立ちますか?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-私の診断の問題) – Raedwald

答えて

3

currentDigitが偶数であるかどうかを確認する必要があります。nではありません。

if(currentDigit % 2 == 0) 
0

バグのためにどのように見えるべきかまず、:問題以来、例えば13(小さなnのため(だけでなく、長さ)のシーケンスを出力してみてくださいすでにあなたに正しい順序が与えられています)。あなたは1340121 ...を取得していることがわかります。これはすでにバグがどこにあるかを示しています。

0

エラーはここにある:

if (n % 2 == 0){ 

は次のようになります。

if (currentDigit % 2 == 0){ 
関連する問題