# The 3n + 1 problem 題目連結 [UVA 100](https://onlinejudge.org/external/1/100.pdf) ## 中文簡述 ### 演算法: * 輸入 n * 印出 n * 如果 n = 1 結束 * 如果 n 是奇數 那麼 3n+1 * 否則 n/2 * 回到 2. 給一數 n 根據演算法我們可以得到一組數列,這組數列的長度稱為 **cycle-length**。 題目會給定兩數,求出兩數間(包含兩數)最長的 cycle-length。 ## [think] 換句話說,在主程式中宣告一個變數`max`來記錄目前最多次的cycle-length 再用副程式 `fun()`來計算單個數字的cycle-length,算完後回傳,並跟`max`比較誰比較大 ## solution: ``` #include<bits/stdc++.h> using namespace std; int fun(int a) { int cnt=0; while(a!=1) { if(a%2==1) { a=3*a+1; } else { a=a/2; } cnt++; } cnt++; return cnt; } int main() { int a,b,c,d,t; while(cin>>a>>b) { c=a; d=b; if(a>b) { t=a; a=b; b=t; } int max=0,i; for(i=a;i<=b;i++) { int res=fun(i); max=max>res?max:res; } cout<<c<<" "<<d<<" "<<max<<endl; } } ``` ###### tags: `UVA` 回目錄 [學習筆記](/gIBZqAbWTCis7uOPp149gA)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up