UVA - 327 Evaluating Simple C Expressions
2016-11-14 18:24
405 查看
2016.11.10
UVA - 327 Evaluating Simple C Expressions
题目大意:根据 ++、-- 的性质计算,a = 1,b = 2……z = 26。输出计算结果和计算后各字母的值。
解题思路:暴力模拟。每碰到一个字母,检查该字母前后是否存在前缀,若存在,将改字母对应的值 +1 或 -1,找到字母前的一个符号 + 或 -,进行对应计算,接着检查该字母是否存在后缀,若存在,将改字母对应的值 +1 或 -1。输出即可。注意自增符号前缀和后缀的计算顺序是不同的,有点难处理。
UVA - 327 Evaluating Simple C Expressions
题目大意:根据 ++、-- 的性质计算,a = 1,b = 2……z = 26。输出计算结果和计算后各字母的值。
解题思路:暴力模拟。每碰到一个字母,检查该字母前后是否存在前缀,若存在,将改字母对应的值 +1 或 -1,找到字母前的一个符号 + 或 -,进行对应计算,接着检查该字母是否存在后缀,若存在,将改字母对应的值 +1 或 -1。输出即可。注意自增符号前缀和后缀的计算顺序是不同的,有点难处理。
#include<stdio.h> #include<string.h> #include<ctype.h> #define max 20000 int main() { int i,j,l,pos,sum,a[26],use[26],postion; char s[max+1],ch[max]; while (fgets(s, max, stdin)) { for (i = 0; i < 26; i++) { a[i] = i + 1; use[i] = 0; } l=0; for (i = 0; s[i] != '\0'; i++) if ( (s[i] == '+') || (s[i] == '-') || (isalpha(s[i]))){ ch[l] = s[i]; ++l; } if (isalpha(ch[0])) { sum = a[ch[0]-'a']; postion = ch[0]-'a'; use[postion] = 1; pos = 1; } //第一个数字特殊处理 if ((ch[0] == '+') && (ch[1] == '+')) { ++a[ch[2]-'a']; sum = a[ch[2]-'a']; postion = ch[2]-'a'; use[postion] = 1; pos = 3; } //同上 if ((ch[0] == '-') && (ch[1] == '-')) { --a[ch[2]-'a']; sum = a[ch[2]-'a']; postion = ch[2]-'a'; use[postion] = 1; pos = 3; } //同上 while (pos < l) { j = pos; while ((j < l)&&(!isalpha(ch[j]))) ++j; if (j < l) use[ch[j]-'a'] = 1; if (j-pos == 1) { if (ch[pos] == '+') sum += a[ch[j]-'a']; else sum -= a[ch[j]-'a']; postion = ch[j]-'a'; } //+,- if (j-pos==3) { if ((ch[pos] == '+') && (ch[pos+1] == '+') && (ch[pos+2] == '-')) { //++- ++a[postion]; postion = ch[j]-'a'; sum = sum-a[postion]; } if ((ch[pos] == '-') && (ch[pos+1] == '-') && (ch[pos+2] == '+')) { //--+ --a[postion]; postion = ch[j]-'a'; sum = sum+a[postion]; } if ((ch[pos] == '-') && (ch[pos+5] == '+') && (ch[pos+2] == '+')) { //-++ postion = ch[j]-'a'; ++a[postion]; sum = sum-a[postion]; } if ((ch[pos] == '+') && (ch[pos+1] == '-') && (ch[pos+2] == '-')) { //+-- postion = ch[j]-'a'; --a[postion]; sum = sum+a[postion]; } } if (j-pos == 5) { if (ch[pos] == '+') ++a[postion]; else --a[postion]; //虽然有6种但是可以化简, postion = ch[j]-'a'; if (ch[pos+4] == '+') ++a[postion]; else --a[postion]; if (ch[pos+2] == '+') sum += a[postion]; else sum -= a[postion]; } pos=j+1; } if ((ch[l-1] == '+') && (ch[l-2] == '+')) ++a[ch[l-3]-'a']; //最后一个数字特殊处理 if ((ch[l-1] == '-') && (ch[l-2] == '-')) --a[ch[l-3]-'a']; //同上 printf("Expression: %s", s); printf(" value = %d\n", sum); for(i = 0; i < 26; i++) if (use[i]) printf(" %c = %d\n",i+'a',a[i]); } return 0; }
相关文章推荐
- UVA - 327 Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- UVA 327 - Evaluating Simple C Expressions
- uva 327 Evaluating Simple C Expressions 简易C表达式计算 stl模拟
- UVA 327 Evaluating Simple C Expressions
- UVA 327 - Evaluating Simple C Expressions(枚举就OK)
- UVA - 327 Evaluating Simple C Expressions
- UVA327- Evaluating Simple C Expressions
- uva 327 Evaluating Simple C Expressions 简易C表达式计算 stl模拟
- uva_327-Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions
- uva 327 Evaluating Simple C Expressions
- UVA_327_Evaluating Simple C Expressions
- uva 327 - Evaluating Simple C Expressions
- UVa 327 Evaluating Simple C Expressions (模拟)
- uva 327 Evaluating Simple C Expressions(遍历)
- uva 327 - Evaluating Simple C Expressions
- UVA - 327 Evaluating Simple C Expressions
- UVA 327 - Evaluating Simple C Expressions
- UVa 327 - Evaluating Simple C Expressions