B 数链问题(黄)
Time Limit:1000MS Memory Limit:65536K
Total Submit:236 Accepted:31
Description
在计算机科学上,很多类问题是无法解决的,我们称之为不可解决问题。然而我们不知道哪一类问题可以解决。现在有这样一个问题……
这是一个古老的猜想:给定任何一个正整数n,对它进行以下操作:
n是偶数:n=n/2
n是奇数:n=3*n+1
这样经过多步操作后,最后必定变为1
如对13进行操作: 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
一共经历了9次操作,则称13这个数的周期是9。
过程图:
Input
多组测试数据,每组一行,一行里有两个数m和n,请你找出m和n之间(包括m,n)的周期最大的数的周期
其中m,n均小于100000
输入0 0 结束
Output
m,n之间周期最大的数的周期,一个结果单独占一行.
Sample Input
1 10 2 3 30 100 0 0
Sample Output
19 7 118
#include <iostream> using namespace std; int zhouqi(int); int main() { int m, n, time, temp,i; while (cin >> m >> n && (m != 0 && n != 0)) { if (m > n) { temp = m; m = n; n = temp; } for (time = 0, i = m;i <= n ;++i ) { temp = zhouqi(i); if (temp > time) { time = temp; } } cout << time << endl; } return 0; } int zhouqi(int m) { int i = 0; while (m != 1) { if (m % 2) { m = 3 * m + 1; } else { m = m / 2; } i++; } return i; }