本文共 1588 字,大约阅读时间需要 5 分钟。
题目描述:
数轴原点有一个蠢蠢机器人。该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置。 ·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///万能头文件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]。
下面看下字符串输入遇到空格就会停止的例子
转载地址:http://nwjo.baihongyu.com/