題目描述
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 Input
3
1 2 3
樣例輸出
Sample Output
0
1
7
#include <bits/stdc++.h> using namespace std; int f(int n,int ans){ if(n == 1) return ans; else if(n%2 == 0) return f(n/2,++ans); else if(n%2 != 0) return f(3*n+1,++ans); } int main(){ int n; cin >> n; for(int i=0;i<n;i++){ int m; cin >> m; cout << f(m,1)-1<<endl; } }
第一:題目中提到的如果循環不終止的話返回-1,實際上不需要,如果函數運行失敗(無限循環)函數自動會返回-1
第二:注意在函數中負責計數變量的定義位置ans