Pagini recente » Cod sursa (job #3276964) | Cod sursa (job #2565) | Cod sursa (job #13146) | Cod sursa (job #229599) | Cod sursa (job #66263)
Cod sursa(job #66263)
#include <assert.h>
#include <stdio.h>
enum { maxsize = 16 };
int calc(int size, int row, int col)
{
printf("calc size %d row %d col %d\n", size, row, col);
assert(size >= 0 && size < maxsize);
assert(row >= 0 && row < (1 << size));
assert(col >= 0 && col < (1 << size));
if(size == 0) return 0; //we're there.
int sub_value = 1 << (2 * (size - 1));
int sub_size = 1 << (size - 1);
printf("sub size %d value %d\n", sub_size, sub_value);
if(row < sub_size && col < sub_size) //first "quadrant" (0, 0)
return calc(size - 1, col, row); //col & row reversed
else if(row >= sub_size && col < sub_size) //second "quadrant" (1, 0)
return sub_value + calc(size - 1, row - sub_size, col);
else if(row >= sub_size && col >= sub_size) //third "quadrant" (1, 1)
return 2 * sub_value + calc(size - 1, row - sub_size, col - sub_size);
else if(row < sub_size && col >= sub_size) //forth "quadrant" (0, 1)
return 3 * sub_value + calc(size - 1, sub_size - 1 - (col - sub_size),
sub_size - 1 - row); //col & row reversed
else
assert(false);
}
int main()
{
int size, row, col, ans;
FILE *f = fopen("fractal.in", "r");
if(!f) return 1;
fscanf(f, "%d%d%d", &size, &col, &row);
col--; row--;
fclose(f);
f = fopen("fractal.out", "w");
if(!f) return 1;
ans = calc(size, row, col);
fprintf(f, "%d\n", ans);
fclose(f);
return 0;
}