3038 3n+1問題。本站提示廣大學習愛好者:(3038 3n+1問題)文章只能為提供參考,不一定能成為您想要的結果。以下是3038 3n+1問題正文
時間限制: 1 s 空間限制: 32000 KB 題目等級 : 白銀 Silver 題目描述 Description 3n+1問題是一個簡單有趣而又沒有解決的數學問題。這個問題是由L. Collatz在1937年提出的。克拉茲問題(Collatz problem)也被叫做hailstone問題、3n+1問題、Hasse算法問題、Kakutani算法問題、Thwaites猜想或者Ulam問題。 問題如下: (1)輸入一個正整數n; (2)如果n=1則結束; (3)如果n是奇數,則n變為3n+1,否則n變為n/2; (4)轉入第(2)步。 克拉茲問題的特殊之處在於:盡管很容易將這個問題講清楚,但直到今天仍不能保證這個問題的算法對所有可能的輸入都有效——即至今沒有人證明對所有的正整數該過程都終止。 輸入描述 Input Description
第一行是一個整數T.表示輸入數據的組數.
第二行是T個正整數n.
輸出描述 Output Description對於每個正整數n,每行輸出一個數s,表示n通過多少步變換會變成1,如果n無法變成1,則輸出-1.
樣例輸入 Sample Input3
1 2 3
樣例輸出 Sample Output0
1
7
數據范圍及提示 Data Size & Hint1 <= T <= 100
1 <= n <= 10000
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 int tot=0; 6 int hasse(int x) 7 { 8 9 if(x==1)return tot; 10 if(x<1)return -1; 11 if(x%2==1) 12 { 13 tot++; 14 hasse(3*x+1); 15 } 16 else 17 { 18 tot++; 19 hasse(x/2); 20 } 21 } 22 int main() 23 { 24 int n; 25 cin>>n; 26 for(int i=1;i<=n;i++) 27 { 28 tot=0; 29 int x; 30 cin>>x; 31 cout<<hasse(x)<<endl; 32 } 33 return 0; 34 }