#include #include #include using namespace std; struct zaz { int num, steps; zaz(int a, int b) {num=a; steps=b;} bool operator<(const zaz &z) const {return num A; int main() { while(1) { int puvA, puvB; int cisloA, cisloB; scanf("%d %d\n", &cisloA, &cisloB); puvA=cisloA; puvB=cisloB; if(cisloA==0 && cisloB==0) break; A.insert(zaz(cisloA, 0)); int step=1; while(cisloA>1) { if(cisloA%2==0) cisloA=cisloA/2; else cisloA=3*cisloA+1; A.insert(zaz(cisloA, step++)); } if(puvA!=1) A.insert(zaz(1, step)); step=0; while(1) { if(A.find(zaz(cisloB, -1))!=A.end()) { printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", puvA, A.find(zaz(cisloB, -1))->steps, puvB, step, cisloB); A.clear(); goto dalsi; } if(cisloB%2==0) cisloB=cisloB/2; else cisloB=3*cisloB+1; step++; } dalsi: ; } return 0; }