COJ 0802 非传统题(二)
(颓了这么多天是时候干点正事了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!即可 |
题解:简单的表达式处理,为"未来程序·改"做准备吧QAQ
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<queue> 6 #include<cstring> 7 #define PAU putchar(' ') 8 #define ENT putchar('\n') 9 using namespace std; 10 const int maxn=10000+10; 11 //int 0 ,+ 1,- , cout<< 5,cin>> 6, 12 bool i[1000];int a[maxn]; 13 void getl(){char ch=getchar();while(ch!='\n') ch=getchar();return;} 14 void p(int t){while(t--)getchar();return;} 15 char ch; 16 void pass(){while(ch==' '||ch=='\n') ch=getchar();return;} 17 inline int read(){ 18 int x=0,sig=1;char ch=getchar(); 19 while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();} 20 while(isdigit(ch))x=10*x+ch-'0',ch=getchar(); 21 return x*=sig; 22 } 23 inline void write(int x){ 24 if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x; 25 int len=0,buf[15];while(x)buf[len++]=x%10,x/=10; 26 for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return; 27 } 28 void init(){ 29 getl();getl();getl();getl(); 30 static char cal[maxn];ch=getchar(); 31 while(ch!='}'){ 32 pass(); 33 if(ch=='i'){ 34 p(3);ch=getchar(); 35 if(i[ch]){puts("compile error!");return;} 36 i[(int)ch]=true;p(1); 37 } 38 else if(ch=='c'){ 39 ch=getchar(); 40 if(ch=='i'){ 41 p(3);ch=getchar(); 42 if(!i[ch]){puts("compile error!");return;} 43 //cin>>a[ch];pass(); 44 a[ch]=read();pass(); 45 p(2); 46 } 47 else{ 48 p(4);ch=getchar(); 49 if(!i[ch]){puts("compile error!");return;} 50 int tmp=a[ch]; 51 char cal=getchar(); 52 if(cal==';') write(tmp); 53 else{ 54 ch=getchar(); 55 if(!i[ch]){puts("compile error!");return;} 56 int e=a[ch]; 57 if(cal=='+') write(tmp+e); 58 else if(cal=='-') write(tmp-e); 59 else if(cal=='*') write(tmp*e); 60 else write(tmp/e); 61 p(2); 62 } 63 } 64 } pass();if(ch=='}')return;ch=getchar(); 65 } 66 return; 67 } 68 void work(){ 69 return; 70 } 71 void print(){ 72 return; 73 } 74 int main(){init();work();print();return 0;}