#include #include #include int main(){ int x,y,i,j; int c = 100; int d = 100; bool next; bool one2; bool one1; int *pole1; int *pole2; while(scanf("%d %d", &x, &y)){ next= false; if(x == 0 && y == 0){ break; } if(x == y){ printf("%d needs 0 steps, %d needs 0 steps, they meet at %d\n", x, y, x); } pole1 = (int*)malloc(c*sizeof(int)); pole2 = (int*)malloc(d*sizeof(int)); pole1[0] = x; pole2[0] = y; i = 1; one1 = false; one2 = false; j = 1; while(1){ if(i == c){ pole1 = (int*)realloc(pole1, 2*c*sizeof(int)); c *= 2; } if(j == d){ pole2 = (int*)realloc(pole2, 2*d*sizeof(int)); d *= 2; } if(!one1){ if(pole1[i-1] % 2 == 0){ pole1[i] = pole1[i-1] / 2; if(pole1[i] == 1){ one1 = true; } i++; }else{ pole1[i] = (3 * pole1[i-1]) + 1; i++; } } for(int m = 0; m < j; m++){ if(pole2[m] == pole1[i-1]){ printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", x, i-1, y, m, pole2[m]); next = true; break; } } if(next){ break; } if(!one2){ if(pole2[j-1] % 2 == 0){ pole2[j] = pole2[j -1] / 2; if(pole2[j] == 1){ one2 = true; } j++; }else{ pole2[j] = (3 * pole2[j-1]) + 1; j++; } } for(int m = 0; m < i; m++){ if(pole1[m] == pole2[j-1]){ printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", x, m, y, j-1, pole1[m]); next = true; break; } } if(next){ break; } } delete [] pole1; delete [] pole2; } return 0; }