sicily 1000. 3n+1數鏈問題

Description

在計算機科學上,有很多類問題是無法解決的,我們稱之爲不可解決問題。然而,在很多情況我們並不知道哪一類問題可以解決,那一類問題不可解決。現在我們就有這樣一個問題,問題如下:

1.       輸入一個正整數n

2.       n顯示出來;

3.       如果n=1則結束;

4.       如果n是奇數則n變爲3n+1 ,否則n變爲n/2

5.       轉入第2步。

例如對於輸入的正整數22,應該有如下數列被顯示出來:

22  11  34  17  52  26  13  40  20  10  5  16  8  4  2  1

 

我們推測:對於任意一個正整數,經過以上算法最終會推到1。儘管這個算法很簡單,但我們仍然無法確定我們的推斷是否正確。不過好在我們有計算機,我們驗證了對於小於1,000,000的正整數都滿足以上推斷。

對於給定的正整數n,我們把顯示出來的數的個數定義爲n的鏈長,例如22的鏈長爲16

       你的任務是編寫一個程序,對於任意一對正整數ij,給出ij之間的最長鏈長,當然這個最長鏈長是由ij之間的其中一個正整數產生的。我們這裏的ij之間即包括i也包括j

 

Input
輸入文件只有一行,即爲正整數ijij之間以一個空格隔開。0 < i ≤ j < 10,000。
Output
文件只能有一行,即爲ij之間的最長鏈長。
Sample Input
 Copy sample input to clipboard
1 10
Sample Output
20

我的解法:

#include <iostream>
//#include <fstream>

using namespace std;

int main()
{
	//ifstream cin("aaa.txt");
	int min,max;
	int largest=0;
	int count=0;
	
	cin>>min>>max;
	for(int i=min;i<=max;i++)
	{
		int count=0;
		int temp=i;
		while(temp != 1)
		{
			if(temp%2 == 0)
			{
				temp = temp/2;
				count++;
			}
			else
			{
				temp = 3*temp + 1;
				count++;
			}
		}
		if(largest < count)
			largest = count;

	}
	largest++;
	cout<<largest<<endl;
	return 0;


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章