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。
你的任務是編寫一個程序,對於任意一對正整數i和j,給出i、j之間的最長鏈長,當然這個最長鏈長是由i、j之間的其中一個正整數產生的。我們這裏的i、j之間即包括i也包括j。
1 10
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;
}