Cod sursa(job #1558027)

Utilizator daniel.sanduSandu Daniel daniel.sandu Data 28 decembrie 2015 16:51:10
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}