描述:題目很簡單,剛開始考慮問題時忽略了所有的字母所代表的值需要全部變化後才進行運算,結果交了幾次錯誤碼,悲催啊……#include <iostream>#include <cstring>#include <cstdio>using namespace std;int main(){ //freopen("a.txt","r",stdin); int n,i,j; int s_flag[27],s_add[27],s_value[27]; int s_untake[10010]; char str[10010],s[10010]; memset(str,0,sizeof(str)); while(gets(str)) { j=n=0; printf("Expression: %s\n",str); memset(s_flag,0,sizeof(s_flag)); memset(s_add,0,sizeof(s_add)); memset(s,0,sizeof(s)); memset(s_value,0,sizeof(s_value)); memset(s_untake,0,sizeof(s_untake)); for(i=0; i<strlen(str); i++) { if(str[i]>='a'&&str[i]<='z') { s_flag[str[i]-'a']=1; s_value[str[i]-'a']=str[i]-'a'+1; } if((str[i]>='a'&&str[i]<='z')||str[i]=='-'||str[i]=='+')s[j++]=str[i]; } memset(str,0,sizeof(str)); for(i=0; i<j; i++) if(s[i]>='a'&&s[i]<='z') { if(i>=2) { if(s[i-1]=='+'&&s[i-2]=='+') { s_value[s[i]-'a']++; s_untake[i-1]=s_untake[i-2]=1; } else if(s[i-1]=='-'&&s[i-2]=='-') { s_value[s[i]-'a']--; s_untake[i-1]=s_untake[i-2]=1; } } if(i<j-2) { if(s[i+1]=='+'&&s[i+2]=='+') { s_add[s[i]-'a']++; s_untake[i+1]=s_untake[i+2]=1; } else if(s[i+1]=='-'&&s[i+2]=='-') { s_add[s[i]-'a']--; s_untake[i+1]=s_untake[i+2]=1; } } } for(i=0; i<j; i++) if(s[i]<='z'&&s[i]>='a') { n=s_value[s[i]-'a']; i++; break; } for(; i<j; i++) if(s[i]>='a'&&s[i]<='z') { if(i-1>=0&&!s_untake[i-1]) { if(s[i-1]=='+') n+=s_value[s[i]-'a']; else if(s[i-1]=='-') n-=s_value[s[i]-'a']; } if(i-3>=0&&(s[i-2]=='+'||s[i-2]=='-')&&!s_untake[i-3]) { if(s[i-3]=='+') n+=s_value[s[i]-'a']; else if(s[i-3]=='-') n=n-s_value[s[i]-'a']; } } printf(" value = %d\n",n); for(i=0; i<26; i++) if(s_flag[i]==1)printf(" %c = %d\n",'a'+i,s_add[i]+s_value[i]); } return 0;}