Pagini recente » Cod sursa (job #558630) | Cod sursa (job #2098320) | Cod sursa (job #1842508) | Cod sursa (job #2839658) | Cod sursa (job #2142030)
# include <stdio.h>
int hillbert1[2][2] = { {0, 3}, {1, 2} };
FILE *fin, *fout;
int numberOfSteps(int k, int x, int y) {
if (k == 1)
return hillbert1[x - 1][y - 1];
int twoToK_1 = (1 << (k - 1));
if (x <= twoToK_1 && y <= twoToK_1)
return numberOfSteps(k - 1, y, x);
if (x > twoToK_1 && y <= twoToK_1)
return twoToK_1 * twoToK_1
+ numberOfSteps(k - 1, x - twoToK_1, y);
if (x > twoToK_1 && y > twoToK_1)
return 2 * twoToK_1 * twoToK_1
+ numberOfSteps(k - 1, x - twoToK_1, y - twoToK_1);
return 3 * twoToK_1 * twoToK_1
+ numberOfSteps(k - 1, twoToK_1 - (y - twoToK_1) + 1, twoToK_1 - x + 1);
}
int main(void) {
int K, x, y;
fin = fopen("fractal.in", "r");
fscanf(fin, "%d%d%d", &K, &y, &x);
fclose(fin);
fout = fopen("fractal.out", "w");
fprintf(fout, "%d", numberOfSteps(K, x, y));
fclose(fout);
return 0;
}