#include #include #include int main(void){ int max = 300000000; int a, b; long *pole1, *pole2; int bigint = 0; pole1 = (long *) malloc(max*sizeof(long)); //memset(pole1, 0, sizeof(pole1)); while (1==1) { scanf("%d %d", &a, &b); if ((a == 0) && (b == 0)) {return 0;} pole2 = (long *) malloc(max*sizeof(long)); //for (int i = 0; i < max; i++) // pole2[i] = 0; long hladaj = a; int krokA = 1, krokB = 1; while (1==1){ if (hladaj == 1) { pole2[hladaj] = krokA; break; } if (pole1[hladaj] == 0){ if (hladaj%2 == 0) pole1[hladaj] = hladaj / 2; else pole1[hladaj] = hladaj *3+1; } pole2[hladaj] = krokA; hladaj = pole1[hladaj]; //if (bigint < hladaj) bigint = hladaj; krokA++; } hladaj = b; while (1 == 1){ //if (hladaj == 1) break; //printf("%d ", hladaj); if (pole2[hladaj] != 0) { //printf(" p %d ", pole2[hladaj]); break; } if (pole1[hladaj] == 0){ if (hladaj%2 == 0) pole1[hladaj] = hladaj / 2; else pole1[hladaj] = hladaj *3+1; } hladaj = pole1[hladaj]; if (bigint < hladaj) bigint = hladaj; krokB++; } printf("%d needs %ld steps, %d needs %d steps, they meet at %ld\n", a, pole2[hladaj]-1, b, krokB-1, hladaj); //printf("%d\n", bigint); free(pole2); } }