题目背景
zrz在写程序,他叫你帮他看看他的程序有没有问题。
题目描述
有一个若干行的程序,每一行只有一个命令,可能出现的命令有一下几种
int a[maxn] 声明一个数组,开头一定是int,不会是别的什么longlong之类的,a是指一个数组的名称(不一定是a,也有可能是别的字母或者多个字母,总之长度不超过10),后面是一个中括号和一个数字或一个变量,表示数组大小(从0到maxn-1,maxn<=100),数组声明之后里面的数均为0。
a[i] h 把h赋给a[i](也就是a[i]=h),同样h可能是一个数字或者是一个变量,i代表一个数字或者是一个变量。
cout h 输出h,h一定是个变量。
输入格式
若干行:每行一个命令
输出格式
对于每一个输出的命令(即cout),输出一行。如果在某一行发现有数组下标越界(切记,只可能出现这种错误,不会出现别的比如重定义之类的问题),不管是哪个命令,都要立即停止,无论下面有多少行命令都忽略,并输出-1。
输入输出样例
输入 #1
int a[10] a[a[0]] 2 cout a[0]
输出 #1
2
输入 #2
int a[10] a[0] 10 cout a[0] a[a[0]] 1 cout a[0]
输出 #2
10 -1
说明/提示
行数不会太多的,变量可能嵌套,如 a[a[b[0]]]等等,也有可能出现大写字母,所有的出现的数字不会超过10^9,也不会是负数,更不会是小数。
疯狂模拟,注意细节处理,判断变量嵌套的时候可以用递归完成,顺便判断是否合法
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<iostream> #include<string> using namespace std; char s[100][10],a[100],b[100],t[100]; int l[100],p[100][100],y,w,ww,h,hh; int zsy(string r,int x,int yy){ if (r[x]>='0' && r[x]<='9') { int uuu=0; for (int i=x;i<=yy;i++) uuu=uuu*10+r[i]-'0'; return uuu; } int www,e; char m[100]; for (int i=0;i<100;i++) m[i]='