题目描述:
数轴原点有一个蠢蠢机器人。该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置。
·LEFT:往左移动一个单位
·RIGHT: 往右移动一个单位
·SAME AS i: 和第i 条执行相同的动作。输入保证i 是一个正整数,且不超过之前执行指令数
输入:
输入第一行为数据组数T (T<=100)。每组数据第一行为整数n (1<=n<=100),即指令条数。以下每行一条指令。指令按照输入顺序编号为1~n。
输出:
对于每组数据,输出机器人的最终位置。每处理完一组数据,机器人应复位到数轴原点。
样例输入:
2
3
LEFT
RIGHT
SAME AS 2
5
LEFT
SAME AS 1
SAME AS 2
SAME AS 1
SAME AS 4
样例输出:
1
-5
解题思路:首先数据是多组输入,我们就先定义一个变量来接收输入int T(因为它的数据范围不大要求(T<=100),故 定义int即可),后面是多组输入我们可以用while(T- -)来处理,这里我定义一个状态数组val[200]来保存位置状态。每次接收到字符串只要看字符串第一个位置的字符s[0]便可以判断输入数据的类型,然后分情况讨论
下面看代码:
#include<bits/stdc++.h> ///万能头文件
using namespace std;
char s[15]; ///字符数组接收字符串
int val[105]; ///状态数组,接收此时的位置状态
int main(){
int T; ///接收输入数据的组数
scanf("%d",&T);
while(T--){
int n,sum=0; ///n表示输入字符串的个数
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",s); ///输入n个字符串,注意字符串输入不要加‘&’
if(s[0]=='L') val[i]=-1;
else if(s[0]=='R') val[i]=1; ///这两句代码是题意描述的
else{
int x;
scanf("%s %d",s,&x); ///分别接收“same” 和 “x”
val[i]=val[x]; ///对“the same as x”的处理
}
sum+=val[i]; ///将每一组的结果存储起来
}
printf("%d\n",sum);
}
return 0;
}
///else这里重点解释一下,有很多人这里不明白。除了LEFT,RIGHT这两种情况就是the same as x的情况,
///上面的s字符数组只会接受“the”这个字符串,因为字符串输入遇到空格就会停止(可以看一眼下面的图片)。
///下面利用s数组(这里重复利用了s数组,用它来反复接收输入的字符串)再来接收“same”这个字符串,
///用k来接收“i”(具体的数字)这样就利用字符串输入
///遇到空格就停止输入这个特性来完美解决这个问题
the same as x:解释称代码就是val[i]=val[x]。
下面看下字符串输入遇到空格就会停止的例子
这里输入的是“xia xia”但它只接收到“xia”就停止接收了,因为遇到了空格。