Pagini recente » Cod sursa (job #826430) | Cod sursa (job #2176042) | Cod sursa (job #2119181) | Cod sursa (job #2649493) | Cod sursa (job #772715)
Cod sursa(job #772715)
#include <stdio.h>
#include <algorithm>
#include <list>
int hilb[16];
int calc_cadran(int *x, int *y, int ord) {
int L = 1 << ord;
if (*x <= L / 2 && *y <= L / 2) {
int aux;
aux = *x;
*x = *y;
*y = aux;
return 1;
}
if (*x > L / 2 && *y <= L / 2) {
*x -= L / 2;
return 2;
}
if (*x > L / 2 && *y > L / 2) {
*x -= L / 2;
*y -= L / 2;
return 3;
}
*y -= L / 2;
int aux = *x;
*x = L / 2 - *y + 1;
*y = L / 2 - aux + 1;
return 4;
}
int fractal(int x, int y, int ord) {
if (ord == 1) {
if (x == 1 && y == 1) {
return 0;
}
if (x == 1 && y == 2) {
return 3;
}
if (x == 2 && y == 1) {
return 1;
}
if (x == 2 && y == 2) {
return 2;
}
}
int cadran = calc_cadran(&x, &y, ord);
if (cadran == 1) {
return fractal(x, y, ord - 1);
}
if (cadran == 2) {
return hilb[ord - 1] + fractal(x, y, ord - 1) + 1;
}
if (cadran == 3) {
return 2 * hilb[ord - 1] + fractal(x, y, ord - 1) + 2;
}
return 3 * hilb[ord - 1] + fractal(x, y, ord - 1) + 3;
}
int main() {
FILE *f = fopen("fractal.in", "r");
FILE *g = fopen("fractal.out", "w");
hilb[0] = 0;
int x, y, k;
for (int i = 1; i < 16; i++) {
hilb[i] = 4 * hilb[i - 1] + 3;
fprintf(stderr, "%d ",hilb[i]);
}
fprintf(stderr, "\n");
fscanf(f, "%d%d%d", &k, &x, &y);
fprintf(g, "%d", fractal(y, x, k));
fclose(f);
fclose(g);
}