Pagini recente » Diferente pentru propuneri/6-arhiva-educationala intre reviziile 10 si 16 | Cod sursa (job #532003) | Cod sursa (job #363732) | Rating Morariu (MorariuT) | Cod sursa (job #96731)
Cod sursa(job #96731)
#include <fstream>
#include <math.h>
using namespace std;
int Fractal(int ordin)
{
if(ordin == 1)
return 3;
else
return 4*Fractal(ordin - 1)+3;
}
int NrPasi(int ordin, int x, int y)
{
if(ordin == 1)
{
if(x == 1 && y == 1)
return 0;
if(x == 1 && y == 2)
return 1;
if(x == 2 && y == 2)
return 2;
if(x == 2 && y == 1)
return 3;
}
else
{
if((x >= 1 && x <= pow(2.0,ordin-1)) && (y >= 1 && y <= pow(2.0, ordin-1)))
return NrPasi(ordin-1, y, x);
if((x >= 1 && x <= pow(2.0,ordin-1)) && (y > pow(2.0, ordin-1)))
return Fractal(ordin-1) + 1 + NrPasi(ordin-1, x, y-(int)pow(2.0, ordin-1));
if((x > pow(2.0, ordin-1)) && (y > pow(2.0, ordin-1)))
return 2*Fractal(ordin-1) + 2 + NrPasi(ordin-1, x-(int)pow(2.0, ordin-1), y-(int)pow(2.0, ordin-1));
if((x > pow(2.0, ordin-1)) && (y >= 1 && y <= pow(2.0, ordin-1)))
return 3*Fractal(ordin-1) + 3 + NrPasi(ordin-1, (int)pow(2.0, ordin-1) - y + 1,(int)pow(2.0, ordin-1) - ( x-(int)pow(2.0, ordin-1))+1);
}
}
int main(void)
{
ifstream in;
ofstream out;
in.open("fractal.in");
out.open("fractal.out");
int k, x,y;
in >> k >> x >> y;
in.close();
int n = NrPasi(k , x, y);
out << n << endl;
out.close();
return 0;
}