Pagini recente » Cod sursa (job #1088917) | Cod sursa (job #2902484) | Cod sursa (job #2482863) | Cod sursa (job #829565) | Cod sursa (job #1572290)
#include <fstream>
#include <cstdio>
int power(int x, unsigned n) {
if (n == 0)
return 1;
return x * power(x, n - 1);
}
int fractal(int n, int x, int y) {
if (n == 1)
return (2 - x) * (y - 1) + (x - 1) * (-y + 4);
int halfEdge = power(2, n - 1), cadran, newX, newY;
if (x <= halfEdge && y <= halfEdge) {
cadran = 0;
newX = y;
newY = x;
} else if (x <= halfEdge && y > halfEdge) {
cadran = 1;
newX = x;
newY = y - halfEdge;
} else if (x > halfEdge && y > halfEdge) {
cadran = 2;
newX = x - halfEdge;
newY = y - halfEdge;
} else {
cadran = 3;
newX = halfEdge - y + 1;
newY = 2 * halfEdge - x + 1;
}
return cadran * power(4, n - 1) + fractal(n - 1, newX, newY);
}
int main() {
char const * const inputFile = "fractal.in",
* const outputFile = "fractal.out";
std::ifstream in(inputFile);
std::ofstream out(outputFile);
int k = 1, x = 1, y = 1;
while (in >> k >> x >> y)
out << fractal(k, x, y) << std::endl;
return 0;
}