COJ 0802 非传统题(二)
2015-07-07 20:06
281 查看
(颓了这么多天是时候干点正事了QAQ)
题解:简单的表达式处理,为"未来程序·改"做准备吧QAQ
非传统题(二) |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述 |
还是很久很久以前,chx丢失了一段程序,然而就在今天,他找到了这段程序!!! 但是很可惜因为刚刚经历了中考,智商被降为0,因此他不会读这段程序了,只是隐约知道这段程序好像是c++程序,现在请你来帮忙翻译给chx听并通过测试数据~ 当然了,chx是不会让你写一个dev c++的啦,你要实现的功能请看其他说明。 |
输入 |
呵呵 |
输出 |
呵呵 |
输入示例 |
样例1: #include<iostream> using namespace std; int main() { int a,b; cin>>a; cin>>b; cout<<a+b; } 样例2: #include<iostream> using namespace std; int main() { int a; cin>>a; cin>>b; cout<<a+b; } |
输出示例 |
样例1: 如果萌萌哒测评机给了你3,4,那么你就要输出7 如果萌萌哒测评机给了你2,6,那么你就要输出8 样例2: compile error! |
其他说明 |
本题采用特殊评测Special Judge,测评机将会贴心的为你准备好你要cin的数据,所以当你识别到cin语句的时候请大胆的cin吧!具体请看样例输出。 接下来为了简化题目,做如下规定: 第一行只会是#include<iostream>,保证这个头文件是足够用的,不会出现奇怪的库函数编译错误。 第二行只会是using namespace std;这就保证了在调用swap等函数时不需要加"std::",(不过本题中用不到) 第三行只会是int main(),不会传参数。 第四行只会是{,不会像chx一样缩行到int main那一行的。 接下来便是核心代码们,每一行会有四个格的缩进 对于核心代码,只有这样几种操作: int <名称>;表示申请一个变量。不会出现 int a,b;这样的语句,一定是分两行的int操作。 如果在一个程序中int同一个变量多次,你需要报错(后面会讲到) 为了摆脱恶心的字符串技术,chx保证变量是一个合法的char字符。 cin>><名称>;输入指令。后面是变量名。如果没有这个变量,请抛出异常。 同样地,不会出现cin>>a>>b;之类的命令,一定是分开的两个cin且不在同一行。 cout<<<运算符>;一看这个就比较恶心。输出命令后面紧接着是一个简单运算符,只可能是一个变量名或者是变量名+运算符+变量名。其中运算符只可能是加减乘除中的一个,即(+,-,*,/),命令合法,不会除以0。同样地,你只需要按int运算即可。同时,如果出现没有定义的变量参与运算,你需要抛出异常。依然保证不会出现cout<<a<<b; 其他命令保证不会出现,比如return 0; 最后一行一定是"}"表示程序的结束。 抛出异常:你只需要即刻终止程序然后输出compile error!即可 |
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> #include<cstring> #define PAU putchar(' ') #define ENT putchar('\n') using namespace std; const int maxn=10000+10; //int 0 ,+ 1,- , cout<< 5,cin>> 6, bool i[1000];int a[maxn]; void getl(){char ch=getchar();while(ch!='\n') ch=getchar();return;} void p(int t){while(t--)getchar();return;} char ch; void pass(){while(ch==' '||ch=='\n') ch=getchar();return;} inline int read(){ int x=0,sig=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();} while(isdigit(ch))x=10*x+ch-'0',ch=getchar(); return x*=sig; } inline void write(int x){ if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x; int len=0,buf[15];while(x)buf[len++]=x%10,x/=10; for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return; } void init(){ getl();getl();getl();getl(); static char cal[maxn];ch=getchar(); while(ch!='}'){ pass(); if(ch=='i'){ p(3);ch=getchar(); if(i[ch]){puts("compile error!");return;} i[(int)ch]=true;p(1); } else if(ch=='c'){ ch=getchar(); if(ch=='i'){ p(3);ch=getchar(); if(!i[ch]){puts("compile error!");return;} //cin>>a[ch];pass(); a[ch]=read();pass(); p(2); } else{ p(4);ch=getchar(); if(!i[ch]){puts("compile error!");return;} int tmp=a[ch]; char cal=getchar(); if(cal==';') write(tmp); else{ ch=getchar(); if(!i[ch]){puts("compile error!");return;} int e=a[ch]; if(cal=='+') write(tmp+e); else if(cal=='-') write(tmp-e); else if(cal=='*') write(tmp*e); else write(tmp/e); p(2); } } } pass();if(ch=='}')return;ch=getchar(); } return; } void work(){ return; } void print(){ return; } int main(){init();work();print();return 0;}
相关文章推荐
- POJ 2482 扫描线(面积覆盖最大次数)
- openGL ES JNI贴图 平移 旋转 缩放
- linux程序设计——多线程(第十二章)
- jQuery 常见操作实现方式
- 用navicat链接不上ubuntu中的mysql服务器
- android5.x添加sim1,sim2标识
- 使用文件给swap增加空间
- HDOJ 2121 Ice_cream’s world II 最小树形图无根树
- Android studio学习和gradle学习列表
- 12545 - Bits Equalizer(贪心?)
- Oracle成长点点滴滴(1)— 安装和配置
- Linux源码学习(7) 2013-3-1
- c++ STL stack & queue
- [LintCode] 在O(1)时间复杂度删除链表节点
- 《C#程序设计》开发总结
- 一)面向对象思想的核心概念
- kernel logo到开机动画之间闪现黑屏(android 5.X)
- Linux源码学习(6) 2013-3-1
- 【扩展欧几里得】Bzoj 1477:青蛙的约会
- 关于iOS解析XML使用NSXMLParser和GDataXML不得不说的一些事