Pagini recente » Cod sursa (job #1065399) | Cod sursa (job #1370661) | Cod sursa (job #227707) | Cod sursa (job #2523497) | Cod sursa (job #803599)
Cod sursa(job #803599)
#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; break;
case 1: np = 0; break;
case 2: np = 2; break;
case 3: np = 2; break;
}
state = (state + 1) % 4;
} else if (i >= mij && j < mij) { //CADRAN 2
switch(state) {
case 0: np = 1; break;
case 1: np = 3; break;
case 2: np = 3; 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; break;
case 3: np = 0; break;
}
i -= mij;
j -= mij;
} else { //CADRAN 4
switch(state) {
case 0: np = 3; break;
case 1: np = 1; break;
case 2: np = 1; break;
case 3: np = 3; break;
}
j -= mij;
state = (state - 1) % 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;
}