Pagini recente » Cod sursa (job #2380822) | Cod sursa (job #2940485) | Cod sursa (job #1884001) | Cod sursa (job #1004300) | Cod sursa (job #1626139)
#include<stdio.h>
int nr_laturi(int k)
{
int i,nr=0;
for(i=1;i<=k;i++)
{
nr=nr*4+3;
}
return nr;
}
int nr_puncte(int k)
{
int i=0,nr=1;
for(i=1;i<=k;i++)
{
nr=nr*2;
}
return nr;
}
int cadran(int x,int y,int k)
{
if(x<=k/2&&y<=k/2)return 1;
else
if(x<=k/2&&y>k/2)return 2;
else
if(x>k/2&&y<=k/2)return 4;
else return 3;
}
void transf(int&x,int&y,int cad,int l)
{
int xp,yp;
if (cad==1)
{
xp=x;
yp=y;
x=l/2-yp+1;
y=xp;
}
if (cad==2)
{
y=y-l/2;
}
else
if(cad==3)
{
x=x-l/2;
y=y-l/2;
}
else if(cad==4)
{
xp=x;
yp=y;
x=yp;
y=l-xp+1;
}
}
int calcul(int x,int y,int k)
{
int cadr,lat;
if(k==0)return 0;
lat=nr_laturi(k);
cadr=cadran(x,y,nr_puncte(k));
transf(x,y,cadr,nr_puncte(k));
if(cadr==2||cadr==3)return (cadr-1)*nr_laturi(k-1)+cadr-1+calcul(x,y,k-1);
else return (cadr-1)*nr_laturi(k-1)+cadr-1+nr_laturi(k-1)-calcul(x,y,k-1);
}
int main()
{
FILE *A,*B;
A=fopen("fractal.in","r");
B=fopen("fractal.out","w");
int x,y,k;
fscanf(A,"%d%d%d",&k,&x,&y);
fprintf(B,"%d",calcul(x,y,k));
fclose(A);
fclose(B);
}