2011-11-07 56 views
0

我試圖解決項目euler上的問題14,而我最初的蠻力嘗試讓我難住。出於某種原因,代碼遇到了13和19之間的循環。我不認爲我可以正確地繼續使用非粗暴的方法,除非我可以首先獲得蠻力方法,至少可以正確計算。 我的代碼如下所示:Collat​​z猜想代碼13和19之間的「彈跳」

unsigned int loop(unsigned int n) 
{ 
    unsigned int count = 0; 
    while(1) 
    { 
     while(is_even(n)) 
     { 
      n /= 2; 
     } 
     if(n > 1) 
      n = (n * 3) + 1; 
     else 
      break; 
     count++; 
     printf("%d,", n); 
    } 
    printf("%d\n", n); 
    return count; 
} 

is_even(N)被計算爲 「N & 0×01」。

有誰能告訴我爲什麼輸出是連續的(理論上是無止境的)「13,19」流重複?

回答

3

n & 0x011如果n,而不是是否是甚至。更改is_even返回!(n & 0x01)

+0

謝謝,當我寫這個函數時,我顯然沒有給予足夠的關注! –