UVa 327 - Evaluating Simple C Expressions

来源:互联网 发布:海外淘软件 编辑:程序博客网 时间:2024/06/07 05:48

題目:給你一些C語言表達式,字母a~z代表初始值為1~26的變量,計算表達式的值以及計算后的個變量的值。

分析:模擬。模擬計算即可,因為式子簡單,沒有複雜的結合,直接判斷字母前後相鄰的相同符號為一組。

說明:╮(╯▽╰)╭。

#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;char expression[121] = "#";int  value[26], appear[26];int before(char str[], int index){if (index > 0) index --;while (str[index] == ' ')index --;return index;}int after(char str[], int index){index ++;while (str[index] == ' ')index ++;return index;}int main(){while (gets(&expression[1])) {expression[strlen(expression)+1] = 0;expression[strlen(expression)] = '#';for (int i = 0; i < 26; ++ i) {value[i] = i+1;appear[i] = 0;}int ans = 0, b1, b2, a1, a2, op, test;for (int i = 1; expression[i] != '#'; ++ i) {if (expression[i] >= 'a' && expression[i] <= 'z') {appear[expression[i]-'a'] = 1;b2 = before(expression, b1 = before(expression, i));a2 = after (expression, a1 = after (expression, i));//beforeif (expression[b1] == '+' && expression[b2] =='+')value[expression[i]-'a'] ++;if (expression[b1] == '-' && expression[b2] == '-')value[expression[i]-'a'] --;//valueif ((expression[b1] == '+' && expression[b2] == '+') || (expression[b1] == '-' && expression[b2] == '-'))op = before(expression, b2);else op = b1;test = before(expression, op);//printf("<%d %d %d>\n",b1,b2,op);if (expression[op] == '#')ans = value[expression[i]-'a'];else if (expression[test] == '#') {if (expression[op] == '-')ans = -value[expression[i]-'a'];else ans = value[expression[i]-'a'];}else {if (expression[op] == '-')ans = ans - value[expression[i]-'a'];else ans = ans + value[expression[i]-'a'];}//afterif (expression[a1] == '+' && expression[a2] =='+')value[expression[i]-'a'] ++;if (expression[a1] == '-' && expression[a2] == '-')value[expression[i]-'a'] --;}}expression[strlen(expression)-1] = 0;printf("Expression: ");puts(&expression[1]);printf("    value = %d\n",ans);for (int i = 0; i < 26; ++ i)if (appear[i])printf("    %c = %d\n",i+'a',value[i]);}    return 0;}


0 0
原创粉丝点击