uva 327
2015-11-20 19:05
309 查看
题目大意:计算表达式的值
思路:刚开始有前缀后缀进行特殊处理,然后先将26个字母的值存放到一个数组中,如果出现前缀后缀需要进行++ – 就用一个flag进行++ – 最后的值加上flag就可以了。。 可是RE了。。不懂
思路:刚开始有前缀后缀进行特殊处理,然后先将26个字母的值存放到一个数组中,如果出现前缀后缀需要进行++ – 就用一个flag进行++ – 最后的值加上flag就可以了。。 可是RE了。。不懂
#include <iostream> using namespace std; #include <cstring> #include <deque> #include <vector> #include <algorithm> char s[200]; int val[27]; int flag = 0; vector<char> que; deque<int> v; void filter() { int i = 0; for (int j = 0; j < strlen(s); j++) { if (s[j] != ' ') s[i++] = s[j]; } s[i] = '\0'; } bool Prefix(int i) //前缀 { if ((s[i - 1] == '+' && s[i - 2] == '+') || (s[i - 1] == '-' && s[i - 2] == '-')) return true; return false; } bool Suffix(int i) //后缀 { if ((s[i + 1] == '+' && s[i + 2] == '+') || (s[i + 1] == '-' && s[i + 2] == '-')) return true; return false; } void solve() { int i = 0, j = 0,k=0,sum=0; flag = 0; if (!isalpha(s[0])) { if (s[0] == '+') //前缀 { val[s[2] - 'a']++; } else if (s[0] == '-') { val[s[0] - 'a']--; } v.push_back(val[s[2] - 'a']); //这里写成s[0] que.push_back(s[2]); s[0] = s[1] = s[2] = ' '; k = 2; } else k = -1; for (i = ++k; i < strlen(s); i++) { if (isalpha(s[i])) { if (i >= 2) { if (Prefix(i) && s[i - 1] == '+' ) { val[s[i] - 'a']++; s[i - 1] = s[i - 2] = ' '; } else if (Prefix(i) && s[i - 1] == '-') { val[s[i] - 'a']--; s[i - 1] = s[i - 2] = ' '; } } if (i + 2 < strlen(s)) { if (Suffix(i) && s[i + 1] == '+' ) { val[s[i] - 'a']++; flag--; s[i + 1] = s[i + 2] = ' '; } else if (Suffix(i) && s[i + 1] == '-') { val[s[i] - 'a']--; flag++; s[i + 1] = s[i + 2] = ' '; } } v.push_back(val[s[i]-'a']); que.push_back(s[i]); s[i] = ' '; } } filter(); for (i = 0; i < strlen(s); i++) { int a = v.front(); v.pop_front(); int b = v.front(); v.pop_front(); if (s[i] == '+') sum = a + b; else sum = a - b; v.push_front(sum); } printf(" value = %d\n",v.front()+flag); sort(que.begin(), que.begin()+que.size()); for (i = 0; i < que.size(); i++) printf(" %c = %d\n",que[i],val[que[i]-'a']); que.clear(); v.clear(); } int main() { int i = 0; int j = 0; int sum = 0; while (gets(s)) { for (i = 0; i < 26; i++) val[i] = i + 1; printf("Expression: %s\n", s); filter(); solve(); } }
相关文章推荐
- stand up meeting 11/20/2015
- ELK日志管理之——kibana部署
- AngularJS进阶(八)实现页面跳转并进行参数传递
- AngularJS进阶(八)实现页面跳转并进行参数传递
- libevent测试
- DRY 原则
- ELK日志管理之——kibana部署
- 阿里美团交恶,曾经情义今何在?
- c k e d i t o r
- Android app的文件缓存目录
- 年轻人累不死,但会闲死
- CentOS 7 安装配置 mongodb 3.0.7
- PHP Fatal error: Call to undefined function curl_init() in xxx
- 在线画图工具 免费
- php 截取视频图片
- 自己整理的计算机视觉领域稍微容易中的期刊(第一版)
- 【ThinkPHP】分页写法
- 设置活动窗口 AttachThreadInput SetForegroundWindow
- JAVA架构师
- 树状数组+dp(不太懂) Codeforces 597C