#include #include /* int main(int argc,char** argv) { int aa; scanf("%d",&aa); printf("bingo"); printf("%d", aa); return 0; } */ bool isEven(int n) { return (n%2==0); } int compare (const void* a, const void* b) { int aa = *((const int*) a); int bb = *((const int*) b); return aa - bb; } bool binfind(int* where,int start, int end, int n){ int pivot = start+((end-start)/2); //printf("%d %d\n",start,end); //printf("where[%d]=%d\n",pivot,where[pivot]); if(where[pivot]==n) return true; if(start==end || end < start) return false; if(where[pivot]n) return binfind(where,start,pivot-1,n); } int main(int argc,char** argv) { int rada[1000000]; int a; int b; int result; int steps = 0; int steps2 = 0; int kroky, kroky2 = 0; int next; bool quit = 0; int indexy[1000000]; //scanf("%d %d",&a,&b); //printf("%d %d\n", a,b); while(1){ scanf("%d %d",&a,&b); if (a == 0 && b == 0) { return 0; } //printf("bingo\n"); rada[0] = a; steps = 0; while(1) { steps++; if(isEven(rada[steps-1])){ rada[steps] = rada[steps-1]/2; }else{ rada[steps] = 3*rada[steps-1]+1; } //printf("%d \n",rada[steps]); if(rada[steps]==1) break; } //printf("%d \n",steps); for(int i=0;i<=steps;i++){ //printf("%d %d\n",i,rada[i]); indexy[i] = rada[i]; } qsort(&rada,steps+1,sizeof(int),&compare); next = b; steps2 = 0; quit = 0; while(1) { /*for(int i=0; i<=steps; i++){ //printf("vysledek %d\n",rada[i]); if(rada[i]==next){ //kroky2 = i; quit = 1; break; } }*/ //binfind(&indexy[0],0,steps,next); if (binfind(&rada[0],0,steps,next)) { break; } //printf("Konec\n"); steps2++; if(isEven(next)){ next = next/2; }else{ next = 3*next+1; } //printf("%d\n",next); /*for(int i=0;i<=steps;i++){ if(rada[steps]==next){ quit = 1; break; } }*/ } // kroky2 = najit next v indexy for(int i=0;i<=steps;i++){ if (next == indexy[i]) { kroky2 = i; break; } //printf("%d %d\n",i,rada[i]); //indexy[i] = rada[i]; } printf("%d needs %d steps, %d needs %d, they meet at %d\n", a,kroky2,b,steps2,next); } return 0; }