Pagini recente » Cod sursa (job #211842) | Cod sursa (job #2196777) | Cod sursa (job #2078945) | Cod sursa (job #2509426) | Cod sursa (job #781116)
Cod sursa(job #781116)
#include<stdio.h>
#include<math.h>
int x, y, k, cadrane[] = {1, 4, 2, 3}, lungime;
void roteste_oglindit1() {
int tmp = cadrane[1];
cadrane[1] = cadrane[2];
cadrane[2] = tmp;
}
void roteste_oglindit2() {
int tmp = cadrane[0];
cadrane[0] = cadrane[3];
cadrane[3] = tmp;
}
void divide(int left, int right, int top, int bottom, int k) {
printf("%d %d %d %d\n", cadrane[0], cadrane[1], cadrane[2], cadrane[3]);
if(k == 1) {
if(left == x && top == y) { //cadranul stanga sus
printf("stanga sus");
lungime += cadrane[0] - 1;
}
else if(left == x && bottom == y) { //cadranul stanga jos
printf("stanga jos");
lungime += cadrane[2] - 1;
}
else if(right == x && top == y) { //cadranul dreapta sus
printf("dreapta sus");
lungime += cadrane[1] - 1;
}
else { //cadranul dreapta jos
printf("dreapta jos");
lungime += cadrane[3] - 1;
}
}
else {
int mx = (right + left - 1) / 2;
int my = (bottom + top - 1) / 2;
printf("%d %d\n", mx, my);
int cadran;
if(x <= mx && y <= my) { //cadranul stanga sus
cadran = cadrane[0];
right = mx;
bottom = my;
printf("1 %d\n", cadran);
}
else if(x <= mx && y > my) { //cadranul stanga jos
cadran = cadrane[2];
right = mx;
top = my + 1;
printf("2 %d\n", cadran);
}
else if(x > mx && y > my) { //cadranul dreapta jos
cadran = cadrane[3];
left = mx + 1;
top = my + 1;
printf("3 %d\n", cadran);
}
else { //cadranul dreapta sus
cadran = cadrane[1];
left = mx + 1;
bottom = my;
printf("4 %d\n", cadran);
}
if(cadran == 1) roteste_oglindit1();
else if(cadran == 2) {
lungime += pow(2, 2 * k - 2);
}
else if(cadran == 3) {
lungime += 2 * pow(2, 2 * k - 2);
}
else if(cadran == 4) {
roteste_oglindit2();
lungime += 3 * pow(2, 2 * k - 2);
}
divide(left, right, top, bottom, k - 1);
}
}
int main() {
FILE *f = fopen("fractal.in", "r");
FILE *g = fopen("fractal.out", "w");
fscanf(f, "%d %d %d", &k, &x, &y);
divide(1, pow(2, k), 1, pow(2, k), k);
fprintf(g, "%d", lungime);
fclose(f);
fclose(g);
return 0;
}