#include #include #include #include int dalsie(int cislo){ printf("asd %d", cislo); if (cislo%2 == 0) return (cislo/2); else return (cislo*3+1); } int main(void){ int max = 23000000; int a, b; int *pole1, *pole2; pole1 = (int *) malloc(max*sizeof(int)); pole2 = (int *) malloc(max*sizeof(int)); memset(pole1, 0, sizeof(pole1)); while (1==1) { scanf("%d %d", &a, &b); if ((a == 0) && (b == 0)) return 0; memset(pole2, 0, sizeof(pole2)); int hladaj = a; int krokA = 1, krokB = 1; while (1==1){ if (hladaj == 1) break; //printf("-- %d ", hladaj); usleep(300); if (pole1[hladaj] == 0){ if (hladaj%2 == 0) pole1[hladaj] = hladaj / 2; else pole1[hladaj] = hladaj *3+1; } pole2[hladaj] = krokA; hladaj = pole1[hladaj]; krokA++; } hladaj = b; while (1 == 1){ if (hladaj == 1) break; //printf("++ %d ", hladaj); if (pole2[hladaj] != 0) break; if (pole1[hladaj] == 0){ if (hladaj%2 == 0) pole1[hladaj] = hladaj / 2; else pole1[hladaj] = hladaj *3+1; } hladaj = pole1[hladaj]; krokB++; } printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", a, pole2[hladaj]-1, b, krokB-1, hladaj); } }