Pagini recente » Cod sursa (job #791043) | Cod sursa (job #414533) | Cod sursa (job #454857) | Cod sursa (job #1718176) | Cod sursa (job #930130)
Cod sursa(job #930130)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int distk1[3][3] = {
{0,0,0},
{0,0,1},
{0,3,2}
};
int main()
{
FILE* fin = fopen("fractal.in", "r");
FILE* fout = fopen("fractal.out", "w");
int k, x, y;
fscanf(fin, "%d %d %d", &k, &x, &y);
int steps = 0;
int lenk = pow((long double)2,k);
while (k > 1)
{
int mid = lenk / 2;
int block = 0;
if (x <= mid && y <= mid)
{
block = 1;
int tmp = x;
x = y;
y = tmp;
}
else if (x <= mid && y > mid)
{
block = 2;
y -= mid;
}
else if (x > mid && y > mid)
{
block = 3;
y -= mid;
x -= mid;
}
else
{
block = 4;
x -= mid;
x = mid - x + 1;
y = mid - y + 1;
int tmp = x;
x = y;
y = tmp;
}
steps += (block - 1) * (mid * mid - 1) + (block - 1);
lenk = mid;
k--;
}
steps += distk1[x][y];
fprintf(fout, "%d", steps);
fclose(fin);
fclose(fout);
}