Cod sursa(job #2208666)

Utilizator MoldooooooooMoldoveanu Stefan Moldoooooooo Data 30 mai 2018 21:18:44
Problema Nunta Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#define max(a, b) (a>b)?a:b
void Fib(int X[220], int Y[220], int Z[220]){
    int i, r=0;
    Z[0]=max(X[0], Y[0]);
    for(i=1; i<=Z[0]; i++){
        Z[i]=X[i]+Y[i]+r;
        r=Z[i]/10;
        Z[i]%=10;
    }
    Z[Z[0]+1]=r;
    if(r)Z[0]++;
}
int A[220], B[220], C[220], k;
int main()
{
    FILE *fin; FILE *fout;
    fin = fopen("nunta.in", "r");
    fout = fopen("nunta.out", "w");
    int N;
    fscanf(fin, "%d", &N);
    if(N==0){
        fprintf(fout, "%d", 1);
        return 0;
    }
    if(N<=3){
        fprintf(fout, "%d", N);
        return 0;
    }
    A[0]=B[0]=1; A[1]=2; B[1]=3;
    for(k=1; k<=N-3; k++){
        if(k%3==1)Fib(A, B, C);
        else if (k%3==2)Fib(B, C, A);
        else Fib(C, A, B);
    }
    if((N-3)%3==1) for(k=C[0]; k>=1; k--) fprintf(fout, "%d", C[k]);
    else if((N-3)%3==2) for(k=A[0]; k>=1; k--) fprintf(fout, "%d", A[k]);
    else for(k=B[0]; k>=1; k--) fprintf(fout, "%d", B[k]);
    return 0;
}