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('
')
 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!='
') ch=getchar();return;}
14 void p(int t){while(t--)getchar();return;}
15 char ch;
16 void pass(){while(ch==' '||ch=='
') 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;}
原文地址:https://www.cnblogs.com/chxer/p/4628401.html