A27725. 向左转(left.cpp) 问题描述老师正在操场上给同学们训练队列。 小明在队列中。开始的时候,小明面向正北站立。每次老师发出一个指令,小明都跟随指令行动。老师的指令可能是:向左转、向右转、向后转。每个指令的动作与平时我们体育课上的动作一致,具体的:向左转:1. 如果原来小明朝北,向左转后朝西;2. 如果原来小明朝南,向左转后朝东; 3. 如果原来小明朝西,向左转后朝南; 4. 如果原来小明朝东…
填空题
中等
知识点
题目描述
向左转(left.cpp)
问题描述
老师正在操场上给同学们训练队列。
小明在队列中。
开始的时候,小明面向正北站立。

每次老师发出一个指令,小明都跟随指令行动。
老师的指令可能是:向左转、向右转、向后转。每个指令的动作与平时我们体育课上的动作一致,具体的:
向左转:
1. 如果原来小明朝北,向左转后朝西;
2. 如果原来小明朝南,向左转后朝东;
3. 如果原来小明朝西,向左转后朝南;
4. 如果原来小明朝东,向左转后朝北。
向右转:
1. 如果原来小明朝北,向右转后朝东;
2. 如果原来小明朝南,向右转后朝西;
3. 如果原来小明朝西,向右转后朝北;
4. 如果原来小明朝东,向右转后朝南。
向后转:
1. 如果原来小明朝北,向后转后朝南;
2. 如果原来小明朝南,向后转后朝北;
3. 如果原来小明朝西,向后转后朝东;
4. 如果原来小明朝东,向后转后朝西。
给定一连串的动作指令,请问所有指令执行完后,小明的方向朝哪?
输入格式
从文件 left.in 中输入数据。
输入第一行包含一个整数 n,表示命令的个数。
接下来 n 行,每行一个命令。
如果命令为 left,表示向左转。如果命令为 right,表示向右转。如果命令为 around,表示向后转。
输出格式
输出到文件 left.out 中。
输出一个大写字母,表示最终小明的朝向。如果最终朝北,输出 N。如果最终朝南,输出 S。如果最终朝西,输出 W。如果最终朝东,输出 E。
样例输入
4
left
left
right
around
样例输出
E
评测用例规模与约定
注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。对于所有评测用例,1 ≤ n ≤ 1000。
参考答案
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main()
{
freopen("left.in", "r", stdin);
freopen("left.out", "w", stdout);
int n;
cin >> n;
int dir = 0;
for (int i = 1; i <= n; i++)
{
string s;
cin >> s;
if (s == "left")
{
dir--;
}
else if (s == "right")
{
dir++;
}
else
{
dir += 2;
}
dir = (dir + 4) % 4;
}
if (dir == 0)
{
cout << "N" << endl;
}
else if (dir == 1)
{
cout << "E" << endl;
}
else if (dir == 2)
{
cout << "S" << endl;
}
else
{
cout << "W" << endl;
}
return 0;
}
上一题
下一题