#include #include int next(int n){ if(n==1) return -1; if((n%2)==0) return (n/2); return ((3*n)+1); } int main(int argc, char* argv[]){ int a, b; while(1){ scanf("%d %d", &a, &b); if(a==0 && b==0) break; int kapacita = 100; int* x = (int*)malloc(kapacita*sizeof(*x)); for(int i = 0; i < kapacita; i++){ x[i] = 0; } int prvku1 = 1; x[0] = a; while(1){ if(prvku1 == kapacita){ x=(int*)realloc((void*)x, (2*kapacita*sizeof(*x))); for(int k = kapacita; k < 2*kapacita; k++){ x[k] = 0; } kapacita*=2; } int cislo = next(x[(prvku1-1)]); if(cislo == -1) break; x[(prvku1)] = cislo; prvku1++; } kapacita = 100; int* y = (int*)malloc(kapacita*sizeof(*x)); for(int i = 0; i < kapacita; i++){ y[i] = 0; } int prvku2 = 1; y[0]=b; while(1){ if(prvku2 == kapacita){ y=(int*)realloc((void*)y, (2*kapacita*sizeof(*y))); for(int k = kapacita; k < 2*kapacita; k++){ y[k] = 0; } kapacita*=2; } int cislo = next(y[(prvku2-1)]); if(cislo == -1) break; y[(prvku2)] = cislo; prvku2++; } int i=prvku1-1; int j=prvku2-1; int cnt = 0; while(x[i] == y[j]){ cnt++; i--; j--; } //printf("counter %d\n", cnt); printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", a, (prvku1-cnt), b, (prvku2-cnt), x[(prvku1 - cnt)]); free(x); free(y); } return 0; }