作业题,教主说是UVa上的,所以交了。做的时候输入的两个数要先比大小,然后再按原顺序输出,这一点坑了几次。
#include<iostream>
#include<algorithm>
using namespace std;
int times[1000010];
void V587() {
for(int i = 1; i <= 1000000; i++) {
unsigned k = i;
while(k != 1) {
if(k % 2)
k = k * 3 + 1;
else
k /= 2;
++times[i];
if(k < 1000000&& times[k]) {
times[i] += times[k];
break;
}
}
}
}
int main() {
V587();
int m, n;
while(cin >> m >> n) {
int min_num, max_num, max_time = 0;;
min_num = min(m, n);
max_num = max(m, n);
for(int i = min_num; i <= max_num; i++)
if(times[i] > times[max_time])
max_time = i;
cout << m << " " << n << " "
<< times[max_time] + 1 << endl;
}
}