作业题,教主说是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;
    }
}