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 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM