// // File: collatz.cc // Author: cteam003 // // Created on October 22, 2011, 3:33 PM // #include #include // // // struct elem{ int val; long long int key; }; int compare (const void * a, const void * b){ return ((elem *)a)->key-((elem *)b)->key; } int main(int argc, char** argv) { int A, B; long long int temp; elem pole [600]; int ins; while (42){ scanf ("%d %d", &A, &B); if (A==0&&B==0)return 0; ins = 0; temp=A; while(42){ pole[ins].key=temp; pole[ins].val=ins; ins++; if (temp==1)break; if ((temp%2)==0) temp/=2; else temp=temp*3+1; } qsort (pole, ins, sizeof (elem), compare); temp=B; int num=0; elem * found; while (42){ elem temp2; temp2.key=temp; found=(elem *)bsearch ((const void *)(&temp2), pole, ins, sizeof (elem), compare); if (!found){ if ((temp%2)==0) temp/=2; else temp=temp*3+1; num++; } else { printf("%d needs %d steps, %d needs %d steps, they meet at %Ld\n", A, found->val, B, num, found->key); break; } } } return (EXIT_SUCCESS); }