Pagini recente » Cod sursa (job #278298) | Cod sursa (job #2686394) | Cod sursa (job #249592) | Cod sursa (job #2960824) | Cod sursa (job #803611)
Cod sursa(job #803611)
#include <fstream>
using namespace std;
int Hilbert(int k, int i, int j, int state)
{
int s = 0, mij, np;
while (k > 0) {
mij = 1 << (k - 1);
if (i < mij && j < mij) { //CADRAN 1
switch(state) {
case 0: np = 0; state++; break;
case 1: np = 0; state--; break;
case 2: np = 2; break;
case 3: np = 2; break;
}
} else if (i >= mij && j < mij) { //CADRAN 2
switch(state) {
case 0: np = 1; break;
case 1: np = 3; state++; break;
case 2: np = 3; state--; break;
case 3: np = 1; break;
}
i -= mij;
} else if (i >= 1<<k-1) { //CADRAN 3
switch(state) {
case 0: np = 2; break;
case 1: np = 2; break;
case 2: np = 0; state++; break;
case 3: np = 0; state--; break;
}
i -= mij;
j -= mij;
} else { //CADRAN 4
switch(state) {
case 0: np = 3; state--; break;
case 1: np = 1; break;
case 2: np = 1; break;
case 3: np = 3; state++; break;
}
j -= mij;
}
state = % 4;
s += np * mij * mij;
k--;
}
return s;
}
int main()
{
ifstream in("fractal.in");
ofstream out("fractal.out");
int k, x, y;
in>>k>>x>>y;
out<<Hilbert(k, y-1, x-1, 0);
return 0;
}