#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 = 10; int* x = (int*)malloc(kapacita*sizeof(*x)); int prvku1 = 1; x[0] = a; while(1){ if(prvku1 == kapacita){ x=(int*)realloc((void*)x, (2*kapacita*sizeof(*x))); kapacita*=2; } int cislo = next(x[(prvku1-1)]); if(cislo == -1) break; x[(prvku1)] = cislo; prvku1++; } kapacita = 10; int* y = (int*)malloc(kapacita*sizeof(*x)); int prvku2 = 1; y[0]=b; while(1){ if(prvku2 == kapacita){ y=(int*)realloc((void*)y, (2*kapacita*sizeof(*y))); kapacita*=2; } int cislo = next(y[(prvku2-1)]); if(cislo == -1) break; y[(prvku2)] = cislo; prvku2++; } //printf("velikost pole:%d -- %d\n", prvku1, prvku2); int minprvku = 0, vicprvku=0; int i=0, ini=0, j=0; int *vetsi=NULL; int *mensi=NULL; int* aprvku = NULL; int* bprvku = NULL; if(prvku1 < prvku2){ minprvku = prvku1; vicprvku = prvku2; vetsi = y; mensi = x; aprvku = &i; bprvku = &j; } else{ vicprvku = prvku1; minprvku = prvku2; vetsi = x; mensi = y; aprvku = &j; bprvku = &i; } for(j = 0; j < vicprvku; j++){ for(i= 0; i < minprvku; i++){ if(vetsi[j] == mensi[i]){ ini = 1; break; } } if(ini == 1) break; } printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", a, *aprvku, b, *bprvku, mensi[i]); free(x); } return 0; }