2015-03-19 63 views
-1

對弗吉尼亞的3N + 1個問題的鏈接是: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=363N + 1在弗吉尼亞大學(C++)

我的代碼是:

#include<iostream> 
using namespace std; 


long long l(long long n) 
{ 
     if(n==1) 
     { 
       return 1; 
     } 
     if(n%2) 
     { 
       return 1+l(3*n+1); 
     } 
     else 
     { 
       return 1+l(n/2); 
     } 
} 


int main() 
{ 
     long long i,j,k,max=0,f,g; 
     while(!cin.eof()) 
     { 
       cin>>i>>j; 
       f=i; 
       g=j; 
       if(i>j) 
       { 
         long long temp; 
         temp=i; 
         i=j; 
         j=temp; 
       } 
       max=0; 
       for(long long a=i;a<=j;a++) 
       { 
         k=l(a); 
         if(k>max) 
         { 
           max=k; 
         } 
       } 
       cout<<f<<' '<<g<<' '<<max<<'\n'; 
     } 
     return 0; 
} 

解釋我的代碼,我使用的是簡單遞歸。 輸入被當作i,j並且被保留,因爲它分別使用f,g。 我和j是使用temp顯式交換的。在每個測試用例中,max都設置爲0。 k用於保存長度函數l()發送的結果,並用最大存儲長度的max進行測試。

我的解決方案通過了問題中給出的所有不重要的測試用例。 它甚至通過所有涉及我大於j和i == j 棘手的測試用例通過提供關於long的需求的不完整信息隱藏整數溢出。我甚至處理過。輸出以相同的順序獲得i,j。輸入沒有明確的結束。我處理了所有這些。但仍然會得到錯誤的答案。

+0

這是問題,也許最適合http://cs.stackexchange.com/ – jean 2015-03-19 11:14:35

+0

它看起來像你計算什麼L()返回的最大價值,而不是什麼問題詢問,這是印刷值的數量... – Pandrei 2015-03-19 11:22:48

+0

http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – 2015-03-19 12:09:50

回答

0

您的代碼沒問題。
唯一的問題是您的輸入處理直到文件結束。
只需將while(!cin.eof())更改爲while(cin>>i>>j)即可。您將獲得AC :)

+0

非常感謝!我得到了AC :)你能告訴我爲什麼以前的命令不正確嗎? – 2015-03-19 12:46:51

0

可能是'\n'的問題?嘗試使用cout<<f<<' '<<g<<' '<<max<<endl;

相關問題