Cod sursă (job #101786)

Utilizator avatar Robert Popovici Robert Robert IP ascuns
Problemă Bizar (clasele 9-10) Compilator c | 1,22 kb
Rundă Arhiva de probleme Status evaluat
Dată 5 ian. 2015 20:48:35 Scor 80
#include <stdio.h>
#include <stdlib.h>
FILE*fi,*fout;
char a;
int stiva[100000],nr2;
void blanc(){
    while(a==' ')
      a=fgetc(fi);
}
int num(){
    int x=0;
    while(a>='0'&&a<='9'){
        x=x*10+a-'0';
        a=fgetc(fi);
    }
    return x;
}
int E(int in){
    int nr,in1=in,i;
    blanc();
    if(a=='(')
       nr=nr2;
    else
       nr=num();
    blanc();
    if(a!='(')
       return nr;
    else{
        a=fgetc(fi);
        blanc();
        stiva[in]=E(in+1);
        blanc();
        while(a==','){
            a=fgetc(fi);
            blanc();
            in++;
            stiva[in]=E(in);
            blanc();
        }
        if(a==')'){
           a=fgetc(fi);
           blanc();
           if(nr%(in-in1+1)==0){
              nr2=stiva[in];
              return stiva[in];
           }
           else{
              nr2=stiva[in1+nr%(in-in1+1)-1];
              return stiva[in1+nr%(in-in1+1)-1];
           }
        }
    }
}
int main(){
    int x;
    fi=fopen("bizar.in" ,"r");
    fout=fopen("bizar.out" ,"w");
    a=fgetc(fi);
    x=E(0);
    while(a=='(')
       x=E(0);
    fprintf(fout,"%d" ,x);
    fclose(fi);
    fclose(fout);
    return 0;
}