#include #include #define MAX 2000 int c1[MAX]; int c2[MAX]; int step1, step2, pos; int breaki; int transform = 0; void result(int a, int b) { /*if(a>b){ c1[0] = b; c2[0] = a; } else{ c1[0] = a; c2[0] = b; }*/ c1[0]=a; c2[0]=b; transform = 0; for (int i = 0; i < MAX - 1; i++) { if(c1[i]%2 == 0){ c1[i+1]=c1[i]/2; } else{ c1[i+1]=3*c1[i]+1; } if(c1[i] == 1 && transform >1){ breaki = i; break;} transform++; } for (int i = 0; i < MAX - 1; i++) { for (int j = 0; j < breaki; j++) if(c2[i] == c1[j]) { step1 = i; step2 = j; pos = c1[j]; return; } //if (c2[i] == 1) //break; if(c2[i]%2 == 0){ c2[i+1]=c2[i]/2; } else{ c2[i+1]=3*c2[i]+1; } } } int main(){ int a,b; while(1){ scanf("%d %d",&a,&b); if(a == 0 && b ==0) break; result(a,b); memset((void *)c1,0,(size_t)(MAX*sizeof(int))); memset((void *)c2,0,(size_t)(MAX*sizeof(int))); //if(a<=b){ printf("%d needs %d steps, %d needs %d steps, they meet at %d", a, step2, b, step1, pos); //} /*else { printf("%d needs %d steps, %d needs %d steps, they meet at %d", a, step1, b, step2, pos); }*/ printf("\n"); } printf("\n"); return 0; }