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
所以给题目就是要要把两个给定数字中的所有数组(包括它们自己)算出他们的链长,输出最长的那个。
比如,22的链长为16.
代码:
#include<iostream>
using namespace std;
int main()
{
int I, J;
int count[10000];
cin >> I >> J;
for(int i = I; i <= J; i++)
{
int num = i;
count[i] = 1;
while( num != 1 )
{
//cout << num << endl;
if( num % 2 == 0 )
{
num = num / 2;
count[i]++;
}
else{
num = num * 3 + 1;
count[i]++;
}
}
}
int max = 0;
for(int i = I; i <= J; i++)
if( count[i] > max )
max = count[i];
cout << max << endl;
system("pause");
return 0;
}