Pagini recente » Cod sursa (job #1714553) | Cod sursa (job #662148) | Cod sursa (job #1178124) | Cod sursa (job #420129) | Cod sursa (job #1815792)
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int k;
int powerK;
long int globalX, globalY;
int cadran;
long int level_steps;
long int rezultat = 0;
int quadr(int x,int y,int twoPow) {
if (x <= twoPow && y <= twoPow)
return 1;
else if (x >= twoPow + 1 && y <= twoPow)
return 2;
else if (x >= twoPow + 1 && y >= twoPow + 1)
return 3;
else
return 4;
}
void project(int x, int y, int cadran) {
if (cadran == 1) {
globalY = x;
globalX = y;
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 2) {
globalX = x - powerK>>1;
globalY = y;
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 3) {
globalX = x - powerK>>1;
globalY = y - powerK>>1;
//printf("Ma aflu in cadranul %d \n", cadran);
}
if (cadran == 4) {
globalY = powerK - y + 1;
globalX = (powerK >> 1) - x + 1;
//printf("LA acest pas x este %d si powerK este %d \n", x,powerK);
project(globalX, globalY, 1);
//printf("Ma aflu in cadranul %d \n", cadran);
}
}
long int maxSteps(int n) {
return (1 << 2 * (n-1))-1;
}
void result(int x, int y, long int putere) {
//printf("Punctul [%d,%d]\n", x, y);
if (putere == 2) {
if (x == 1 && y ==1)
rezultat+=0;
else
if (x == 2 && y == 1)
rezultat += 1;
else
if (x == 2 && y == 2)
rezultat += 2;
else
if (x == 1 && y == 2)
rezultat += 3;
}
else
{
cadran = quadr(x, y, powerK>>1);
//printf("Ma aflu in cadranul %d si puterea e %d\n", cadran,powerK);
project(x, y, cadran);
rezultat += (cadran - 1)*(level_steps + 1);
//printf("%d\n", (cadran - 1)*(level_steps + 1));
level_steps = level_steps >> 2;
powerK = powerK >> 1;
result(globalX, globalY, powerK);
}
}
int main()
{
FILE *f = NULL;
FILE *g = NULL;
f = fopen("fractal.in", "r");
g = fopen("fractal.out", "w");
fscanf_s(f, "%d %ld %ld", &k, &globalY, &globalX);
powerK = 1 << k;
level_steps = maxSteps(k);
result(globalX, globalY, powerK);
fprintf(g, "%ld", rezultat);
//printf("%ld \n", rezultat);
}