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

2

3

4

5



6

7

8

9

10



11

12



13

14

15

16



17

18



19



20

21



22

23

24



25

26



27



28



29

30

31



32



33



34

35

36

37

38



39

40

41

42



43

44

45

46

47

48

49

50

51



52



53

54

55

56

57

58

59

60

61

62

63
