#include #include #include #include using namespace std; struct elem{ int val; int steps; bool operator<(const elem& e)const{ return val < e.val; } }; int main(){ int a, b; cin >> a >> b; while(a != 0 && b != 0){ int c = min(a, b); vector v(10000); int counter = 0; v[counter].val = c; v[counter].steps = counter; while(c != 1){ if(c%2 == 0){ c /= 2; } else{ c = 3*c + 1; } ++counter; v[counter].val = c; v[counter].steps = counter; } //sort(v.begin(), v.end()); c = max(a, b); bool cond = true; counter = 0; while(c != 1 && cond){ for(unsigned int i = 0; i < v.size(); ++i){ if(v[i].val == c){ if(v[0].val == a){ cout << a << " needs " << v[i].steps << " steps, " << b << " needs " << counter << " steps, they meet at " << v[i].val << endl; } else{ cout << a << " needs " << counter << " steps, " << b << " needs " << v[i].steps << " steps, they meet at " << v[i].val << endl; } cond = false; break; } } if(c%2 == 0){ c /= 2; } else{ c = 3*c + 1; } ++counter; } cin >> a >> b; } return 0; }