2016-09-19 50 views
-6

我無法找到此代碼中的錯誤。如果歐拉項目沒有將我的答案視爲不正確,我會向天堂發誓我的代碼是正確的。14 - 項目歐拉 - Java - 錯誤的答案 - 錯誤?

我可以使用另一種方法,但這個問題並不是那麼複雜,但我已經徹底擊敗了試圖找到該錯誤。

的問題是:

以下迭代序列是爲正整數的集合來定義:

Ñ→N/2(n爲偶數) Ñ→3N + 1(n爲奇數)

使用上述規則,並用13開始,我們產生以下序列:

13→40→20→10→5→16→8→4→2→1 可以看出,這一序列(首發在13和完成在1)包含10個術語。儘管尚未證明(Collat​​z問題),但可以認爲所有起始數字都是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

首先,你應該是什麼樣子的錯誤:試圖爲小n輸出序列(而不僅僅是長度)(例如13,因爲這個問題已經給你正確的序列)。你會看到你得到1340,121 ......並且應該已經告訴你錯誤在哪裏。

0

錯誤是在這裏:

if (n % 2 == 0){ 

應該是:

if (currentDigit % 2 == 0){