Pagini recente » Cod sursa (job #1656634) | Cod sursa (job #2647949) | Cod sursa (job #2115968) | Cod sursa (job #1466321) | Cod sursa (job #869552)
Cod sursa(job #869552)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int pw(int x)
{
int p=1;
while(x)
{
p*=2;
x--;
}
return p;
}
int cadran(int k, int x, int y)
{
if (x<=pw(k)/2 && y<=pw(k)/2) //cadran 1
return 1;
if (x>pw(k)/2 && y<=pw(k)/2) //cadran 2
return 2;
if (x>pw(k)/2 && y>pw(k)/2) //cadran 3
return 3;
if (x<=pw(k)/2 && y>pw(k)/2) //cadran 4
return 4;
return 0;
}
void convert (int k, int & x, int & y)
{
int x2, y2;
if (cadran(k+1,x,y)==1)
{
x2=y;
y2=pow(2,k)+1-x;
x=x2;
y2=pow(2,k)+1-y2;
y=y2;
return;
}
if(cadran(k+1,x,y)==4 )
{
y2=x;
x2=pow(2,k)+1-y;
x=x2;
y2=pow(2,k)+1-y2;
y=y2;
}
}
void convert2(int k, int & x, int & y)
{
if (cadran(k,x,y)==2)
{
x=x-pow(2,k-1);
return;
}
if(cadran(k,x,y)==3)
{
x=x-pow(2,k-1);
y=y-pow(2,k-1);
return;
}
if (cadran(k,x,y)==4)
{
y=y-pow(2,k-1);
return;
}
}
int cadran1 (int x, int y)
{
if(x==1)
{
if (y==1)
return 0;
else
return 3;
}
if(x==2)
{
if (y==1)
return 1;
else
return 2;
}
return 0;
}
int recursiv (int k, int x, int y)
{
int c;
if (k==1) return cadran1(x,y);
c=cadran (k,x,y);
convert2(k,x,y);
if(c==1 || c==4) convert(k-1,x,y);
return ( (c-1)*pw(2*k-2) ) + recursiv(k-1,x,y);
}
int main()
{
int k;
int x, y;
ifstream f("fractal.in");
f>>k>>y>>x;
ofstream d("fractal.out");
d<<recursiv(k,x,y);
return 0;
}