這題初看起來被嚇到了,以為要寫成運算符重載,后來發現其實很水,呵呵(但是某人雖然在poj過了,但是卻在tojWA了5次,實在不解,呵呵)
思路:接入字符串,去掉空格,從頭到尾掃,遇到字母就檢測它的前后兩位有沒有++(--)如果有進行處理,然后看它的后(前)面第3為是+(-)就加(減)到和sum里;用一個三維數組v[26][3]記錄狀態和值。代碼寫的比較繁瑣,呵呵,不想改了,易懂,嘿嘿。
思路:接入字符串,去掉空格,從頭到尾掃,遇到字母就檢測它的前后兩位有沒有++(--)如果有進行處理,然后看它的后(前)面第3為是+(-)就加(減)到和sum里;用一個三維數組v[26][3]記錄狀態和值。代碼寫的比較繁瑣,呵呵,不想改了,易懂,嘿嘿。
1
#include<iostream>
2
using namespace std;
3
char a[500];
4
char b[500];
5
int v[26][3];
6
int l;
7
bool inside(int a, int b)
8

{
9
if(a>=0 && a<l && b>=0 && b<l)
10
return true;
11
else
12
return false;
13
}
14
bool jia(int c, int b)
15

{
16
if(a[c]=='+' && a[b]=='+')
17
return true;
18
else
19
return false;
20
}
21
bool jian(int c, int b)
22

{
23
if(a[c]=='-' && a[b]=='-')
24
return true;
25
else
26
return false;
27
}
28
int main()
29

{
30
int n,i,j,k3,k4,k1,k2;
31
char c;
32
scanf("%d",&n);
33
scanf("\n");
34
while(n--)
{
35
36
int sum=0;
37
for(i=0; i<26; i++)
38
v[i][0]=i+1,v[i][1]=i+1,v[i][2]=0;
39
40
memset(a, 0, sizeof(a));
41
memset(b, 0, sizeof(b));
42
i=0;j=0;
43
while(scanf("%c",&c) && c!='\n')
{
44
b[j]=c;
45
j++;
46
if(c!=' ')
47
a[i]=c,i++;
48
}
49
50
51
52
l=i;int count=0;
53
for(i=0; i<l; i++)
54
if(a[i]<='z' && a[i]>='a')
{
55
count++;
56
v[a[i]-'a'][2]=1;
57
k1=i+1;
58
k2=i+2;
59
k3=i-1;
60
k4=i-2;
61
if(count==1)
{
62
if(inside(k1,k2) && jia(k1,k2))
63
v[a[i]-'a'][0]++;
64
else if(inside(k3,k4) && jia(k3,k4))
65
v[a[i]-'a'][0]++,v[a[i]-'a'][1]++;
66
else if(inside(k1,k2) && jian(k1,k2))
67
v[a[i]-'a'][0]--;
68
else if(inside(k3,k4) && jian(k3,k4))
69
v[a[i]-'a'][0]--,v[a[i]-'a'][1]--;
70
71
sum+=v[a[i]-'a'][1];}
72
else
{
73
if(inside(k1,k2) && jia(k1,k2))
{
74
v[a[i]-'a'][0]++;
75
if(a[i-1]=='+')
76
sum+=v[a[i]-'a'][1];
77
else
78
sum-=v[a[i]-'a'][1];
79
}
80
else if(inside(k3,k4) && jia(k3,k4))
{
81
v[a[i]-'a'][0]++,v[a[i]-'a'][1]++;
82
if(a[i-3]=='+')
83
sum+=v[a[i]-'a'][1];
84
else
85
sum-=v[a[i]-'a'][1];
86
}
87
else if(inside(k1,k2) && jian(k1,k2))
{
88
v[a[i]-'a'][0]--;
89
if(a[i-1]=='+')
90
sum+=v[a[i]-'a'][1];
91
else
92
sum-=v[a[i]-'a'][1];
93
}
94
else if(inside(k3,k4) && jian(k3,k4))
{
95
v[a[i]-'a'][0]--,v[a[i]-'a'][1]--;
96
if(a[i-3]=='+')
97
sum+=v[a[i]-'a'][1];
98
else
99
sum-=v[a[i]-'a'][1];
100
}
101
else
102
{
103
if(a[i-1]=='+')
104
sum+=v[a[i]-'a'][1];
105
else
106
sum-=v[a[i]-'a'][1];
107
}
108
}
109
}
110
printf("Expression: %s\n",b);;
111
printf("value = %d\n",sum);
112
for(i=0; i<26; i++)
113
if(v[i][2]==1)
114
printf("%c = %d\n",'a'+i,v[i][0]);
115
116
}
117
118
return 0;
119
}

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

64

65

66

67

68

69

70

71

72



73



74

75

76

77

78

79

80



81

82

83

84

85

86

87



88

89

90

91

92

93

94



95

96

97

98

99

100

101

102



103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

成千視頻,上萬文章,技術資料與您共享!