Cod sursa(job #1714349)

Utilizator enacheionutEnache Ionut enacheionut Data 7 iunie 2016 23:00:56
Problema Fractal Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
#include <math.h>
#include <string.h>
void incarcare(int curbe[]){
    curbe[1]=3;
    int i;
    for(i=2;i<=15;i++)
        curbe[i]=curbe[i-1]*4+3;
}
void reduCadranul1(int *x,int *y,int raza){
    int aux;
    aux=*x;
    *x=*y;
    *y=aux;
}
void reduCadranul4(int *x,int *y, int raza){
    *x=2*raza-*x+1;
    *y=raza-*y+1;
    int aux=*x;
    *x=*y;
    *y=aux;
}
int determinaCadran(int *x,int *y,int r){
    if(*x<=r)
        if(*y<=r){
            reduCadranul1(x,y,r);
            return 1;
        }
        else{
            *y=*y-r;
            return 2;
        }
    else
        if(*y<=r){
            reduCadranul4(x,y,r);
            return 4;
        }
        else{
            *x=*x-r;
            *y=*y-r;
            return 3;
        }
}
int fractal(int x,int y,int ordin, int curbe[]){
    int cadran,raza=pow(2,ordin-1);
    if(ordin==1){
        if(x==1&&y==1)
            return 0;
        if(x==1&&y==2)
            return 1;
        if(x==2&&y==2)
            return 2;
        return 3;
    }

    cadran=determinaCadran(&x,&y,raza);
    return (cadran-1)*curbe[ordin-1]+cadran-1+fractal(x,y,ordin-1,curbe);
}
int main(){
    int k,a,b,x[16],i;
    FILE *fp=fopen("fractal.in","r");
    FILE *fq=fopen("fractal.out","w");
    incarcare(x);
    fscanf(fp,"%d",&k);
    fscanf(fp,"%d",&a);
    fscanf(fp,"%d",&b);
    fprintf(fq,"%d",fractal(a,b,k,x));
    fclose(fp);fclose(fq);
    return 0;
}