PKU 3337 Expression Evaluator

PKU 3337 Expression Evaluator

超多的if
 1 #include < stdio.h >
 2 char  str[ 500 ];
 3 int  a[ 50 ],ans,j,m,l,t,f[ 50 ];
 4 int  main()
 5 {
 6    int KASE,i;
 7    scanf("%d",&KASE);
 8    gets(str);
 9    while(KASE--)
10    {
11        ans=0;j=0;m=0;l=0,t=0;
12        for(i=1;i<=26;i++){a[i]=i;f[i]=0;}
13        gets(str);
14        i=-1;
15        while(str[++i])
16        {
17            if(str[i]==' ');
18            else if(str[i]=='+'){j++;t=1;}
19            else if(str[i]=='-'){m++;t=-1;}
20            else
21            {
22
23                if(j+m==3)
24                {
25                    if(j==2)
26                    {
27                        if(t==1){a[str[i]-'a'+1]++;ans-=a[str[i]-'a'+1];}
28                        if(t==-1){a[l]++;ans-=a[str[i]-'a'+1];}
29                    }

30                    if(j==1)
31                    {
32                        if(t==1){a[l]--;ans+=a[str[i]-'a'+1];}
33                        if(t==-1){a[str[i]-'a'+1]--;ans+=a[str[i]-'a'+1];}
34                    }

35                    //printf("*******%d\n",ans);
36                }

37                else if(j+m==2)
38                {
39                    a[str[i]-'a'+1]+=t;
40                }

41                else if(j+m==1)
42                {
43                    ans=ans+a[str[i]-'a'+1]*t;
44                }

45                if(!l)ans=a[str[i]-'a'+1];
46                l=str[i]-'a'+1;
47                f[l]=1;
48                j=0;m=0;
49                //printf("afadfadfadfadf%d %d\n",l,ans);
50            }

51            if(j==2 && m==0 && l){a[l]++;j=0;}
52            if(m==2 && j==0 && l){a[l]--;m=0;}
53        }

54        printf("Expression: %s\n",str);
55        printf("value = %d\n",ans);
56        for(i=1;i<=26;i++)
57            if(f[i])
58                printf("%c = %d\n",i+'a'-1,a[i]);
59    }

60    return 0;
61}

62
63

你可能感兴趣的:(PKU 3337 Expression Evaluator)