Cod sursa(job #1572290)

Utilizator claudiuarseneClaudiu Arsene claudiuarsene Data 18 ianuarie 2016 20:39:13
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
}