2016-03-03 47 views
0

這裏是我的C++代碼the 3n+1 problem from UVA online judge在這裏運行良好,但每個提交被判斷爲錯誤的解決方案。我相信它與輸入或輸出格式有關。我只是不確切地知道問題所在。任何人都可以幫我調查這個問題嗎?UVa在線裁判 - 3n + 1 - 錯誤的答案?

#include <iostream> 
using namespace std; 

int main(){ 
    int i, j, ori, orj, complexity = 0; 
    while(!cin.eof()){ 
     cin >> i >> j; 
     ori = i; 
     orj = j; 
     if (i > j){ 
      int temp = i; 
      i = j; 
      j = temp; 
     } 

    for (int k = i; k <= j; k++){ 
     int c = 1; 
     int n = k; 
     do{ 
      c++; 
      if (n % 2 == 0) 
       n /= 2; 
      else 
       n = 3 * n + 1; 
     } while (n != 1); 
     if (c > complexity) 
      complexity = c; 
     } 
     cout << ori << " " << orj << " " << complexity << endl; 
    } 

return 0; 
} 

每個提交已經到了時間限制,當我調試我得到正確的輸出。

+0

我得到的樣品輸入一個錯誤的輸出。 https://ideone.com/lAJDtV – MikeCAT

+0

「當我調試我得到正確的輸出。」真?如何在沒有樣本輸入的情況下進行調試?或者這意味着你沒有做任何調試? – MikeCAT

回答

0

!cin.eof()不是確定何時退出循環的好方法。

嘗試改變

while(!cin.eof()){ 
    cin >> i >> j; 

while(cin >> i >> j){ 
+0

這只是代碼增強,它不能解決問題。 – CodeFuller

+0

@CodeFuller哦,我太相信這個問題了...... – MikeCAT

0

你要清楚的複雜變量的值,爲每一個新輸入數字。你的代碼也不能正確處理i和j的值等於1.在這種情況下,你必須添加特殊條件而不是運行循環。所以這一點,整個代碼變化:

int main() { 
    int i, j, ori, orj, complexity; 
    while (!cin.eof()) { 
     complexity = 0; 
     cin >> i >> j; 
     ori = i; 
     orj = j; 
     if (i > j) { 
      int temp = i; 
      i = j; 
      j = temp; 
     } 

     if (j > 1) { 
      for (int k = i; k <= j; k++) { 
       int c = 1; 
       int n = k; 
       do { 
        c++; 
        if (n % 2 == 0) 
         n /= 2; 
        else 
         n = 3 * n + 1; 
       } while (n != 1); 
       if (c > complexity) 
        complexity = c; 
      } 
     } else { 
      complexity = 1; 
     } 
     cout << ori << " " << orj << " " << complexity << endl; 
    } 

    return 0; 
} 
+0

這個變化的代碼發出錯誤的輸出。 https://ideone.com/5X4kLa – MikeCAT

+0

那麼,怎麼了?這是正確的輸出https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36保持。 – CodeFuller

+0

就像在我的回答中寫的:'!cin.eof()'不是一個好的條件。 – MikeCAT