#include #include #include using namespace std; typedef map Map; Map aMap; Map bMap; void generate(int &a, Map &mapa, int &n) { // sude if (a % 2 == 0) { a /= 2; } // lichy else if (a % 2 == 1) { a = 3*a +1; } mapa[a] = n; } bool check(int num, Map &mapa) { if (mapa.find(num) != mapa.end()) return true; return false; } int main() { int a; int b; int n; while (1) { cin >> a; cin >> b; int aSave = a; int bSave = b; if (a == 0 && b == 0) break; n = 0; aMap[a] = n; bMap[b] = n; while (1) { n++; if (a != 1) generate(a,aMap,n); if (b != 1) generate(b,bMap,n); if (check(a, bMap)) { cout << aSave << " needs " << aMap[a] << " steps, " << bSave << " needs " << bMap[a] << " steps, " << "they meet at " << a << '\n'; break; } if (check(b, aMap)) { cout << aSave << " needs " << aMap[b] << " steps, " << bSave << " needs " << bMap[b] << " steps, " << "they meet at " << b << '\n'; break; } } aMap.clear(); bMap.clear(); } return 0; }