UVA - 327 Evaluating Simple C Expressions
来源:互联网 发布:php流程引擎 编辑:程序博客网 时间:2024/06/14 13:52
2016.11.10
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 20000int 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];elsesum -= 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;}
0 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
- 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
- UVA 327 Evaluating Simple C Expressions
- UVA - 327 Evaluating Simple C Expressions
- UVA 327 - Evaluating Simple C Expressions
- node和JavaScript的异同
- application:(UIApplication *)app openURL 的学习
- cmake使用示例与整理总结
- Android中高效的显示图片 - 加载大图
- NOIP2011观光公交
- UVA - 327 Evaluating Simple C Expressions
- 字节异或
- Struts2的标签库
- 第十二周项目2--操作用邻接表存储的图
- [用C++链接Excel,使用BasicExcel库文件]
- javascript中的真假情况(Boolean)
- NOIP2012Vigenère 密码
- struts2环境下的文件上传
- 关于Spring IOC控制反转一