---
# System prepended metadata

title: The 3n + 1 problem
tags: [UVA]

---

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

