UVA 327 - Evaluating Simple C Expressions(枚举就OK)
来源:互联网 发布:淘宝卖电影资源被罚 编辑:程序博客网 时间:2024/06/03 16:57
#include <cctype>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#include <cstdio>#include <map>#include <stack>using namespace std;#define M 10000char str[M];int len=0;map<char,int> m;stack<int> s;void initmap(){ for(char x='a'; x<='z'; x++) m[x]=x-'a'+1;}//sign->push , alphabet-> calculatevoid solve(){ int i=0; while(i<len) { //cout<<"cccc"<<endl; if(i+2<len&&str[i]=='+'&&str[i+1]=='+'&&isalpha(str[i+2]))//++a { m[str[i+2]]+=1; //cout<<m['a']<<endl; if(!s.empty()) { s.pop(); s.push(s.top()-m[str[i+2]]); } else s.push(m[str[i+2]]); i+=2; } else if(i+2<len&&str[i]=='-'&&str[i+1]=='-'&&isalpha(str[i+2]))//--a { m[str[i+2]]-=1; if(!s.empty()) { s.pop(); s.push(s.top()+m[str[i+2]]); } else s.push(m[str[i+2]]); i+=2; } else if(isalpha(str[i])&&str[i+1]=='+'&&str[i+2]=='+')//a++ { if(!s.empty()) { s.push(s.top()+m[str[i]]); s.pop(); } else s.push(m[str[i]]); m[str[i]]+=1; i+=2; } else if(isalpha(str[i])&&str[i+1]=='-'&&str[i+2]=='-')//a-- { if(!s.empty()) { s.push(s.top()-m[str[i]]); s.pop(); } else s.push(m[str[i]]); m[str[i]]-=1; i+=2; } //a+b else if(s.empty()&&isalpha(str[i])) { s.push(m[str[i]]); } else if(str[i]=='+') { s.push(m[str[i+1]]+s.top()); } else if(str[i]=='-') { s.push(s.top()-m[str[i+1]]); } ++i; }}int cmp(char s1,char s2){ return s1<s2;}int main(){ while(gets(str)) { len=0; printf("Expression: %s\n",str); for(int i=0; i<strlen(str); i++) { if(str[i]==' ')continue; else str[len++]=str[i]; } initmap(); while(!s.empty()) s.pop(); solve(); printf(" value = %d\n",s.top()); int k=0; for(int i=0; i<len; i++) { if(isalpha(str[i])) str[k++]=str[i]; } sort(str,str+k,cmp);// for(int i=0; i<k; i++)// printf("%c",str[i]); for(int i=0; i<k; i++) printf(" %c = %d\n",str[i],m[str[i]]); } return 0;}
小毕的代码,肿么写这么少啊,5。。。想法好好啊,不过是我给你改过的,吼吼~~~
#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#include <cctype>#include <cmath>#include <iostream>using namespace std;int main(){ char s[11000]; while(gets(s)) { printf("Expression: %s\n", s); int len=0; for(int i=0; i<strlen(s); i++) if(s[i]!=' ') s[len++]=s[i]; int al[30]; for(int i = 1; i <= 26; ++i) al[i] = i; int ans[11000]; int len_ans = 0; bool vis[30]; memset(vis, false, sizeof(vis)); for(int i = 0; i < len; ++i) { if(isalpha(s[i])) { vis[s[i]-'a'+1] = true; if(i-2 >= 0&&s[i-1] == s[i-2]) { if(s[i-1] == '-') --al[ s[i] - 'a' + 1 ]; else ++al[ s[i] - 'a' + 1]; s[i-1] = s[i-2] = ' '; } ans[len_ans++] = al[s[i] - 'a' + 1]; if(i+2 < len && s[i+1] == s[i+2]) { if(s[i+1] == '-') --al[s[i]-'a'+1]; else ++al[s[i]-'a'+1]; s[i+1] = s[i+2] = ' '; } } } int sum = ans[0]; for(int i = 0, k = 1; i < len; ++i) { if(s[i] == '-') sum -= ans[k++]; else if(s[i] == '+') sum += ans[k++]; } printf(" value = %d\n", sum); for(int i = 1; i <= 26; ++i) if(vis[i]) printf(" %c = %d\n", 'a'+i-1, al[i]); } return 0;}
0 0
- UVA 327 - Evaluating Simple C Expressions(枚举就OK)
- 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 699 - The Falling Leaves(从中间向两边递归perfect)
- struts2中constant参数设置
- 数据结构总结——静态链表
- Android实现手写板和涂鸦功能
- Win7 (64)+ VS2010 + Python2.7.9 安装 gevent 0.13.8
- UVA 327 - Evaluating Simple C Expressions(枚举就OK)
- String的学习笔记
- 第十二周项目2——摩托车继承自自行车和机动车
- 第十一周 阅读项目 3 改变
- Docker 在Centos 6.5 X64下安装
- C++的函数重载
- Android直接强制退出
- CentOS6下docker的安装和使用
- VR相关网站