您的位置:首页 > 编程语言 > Lua

UVa 327 - Evaluating Simple C Expressions

2016-03-22 14:45 495 查看
題目:給你一些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));
//before
if (expression[b1] == '+' && expression[b2] =='+')
value[expression[i]-'a'] ++;
if (expression[b1] == '-' && expression[b2] == '-')
value[expression[i]-'a'] --;
//value
if ((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'];
}
//after
if (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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: