转向游戏II - C++ 解题思路与代码

题目描述:

小明自认为方向感很好,请小红来测试。小红先让小明面对'东'方立正站好,然后发出 '向左转'、'向右转' 或 '向后转' 的命令。每个命令执行后,小明都正确地说出了他面对的方向。命令是以数字方式表达:0 代表 '向右转',1 代表 '向左转',2 代表 '向后转'。

输入格式:

从标准输入读入数据。输入共两行。第一行是一个正整数 n(1≤n≤10,000),代表命令的条数;第二行是 n 个整数,每个整数是 0、1 或 2,代表小红发出的口令。

输出格式:

输出到标准输出。一个整数,代表小明回答 '北' 的次数。

思路:

根据题意,我们需要记录小明面对的方向,然后根据小红的命令进行转向,最后统计小明回答 '北' 的次数。

我们可以使用一个变量 direction 来记录小明面对的方向,初始值为 0,表示面对东方。然后根据小红的命令进行转向,具体的转向规则如下:

  • 0:向右转,方向加 1,即 direction = (direction + 1) % 4。- 1:向左转,方向减 1,即 direction = (direction + 3) % 4。- 2:向后转,方向加 2,即 direction = (direction + 2) % 4

然后我们只需要统计小明回答 '北' 的次数,即当 direction 的值为 0 时,计数器加 1。

最后输出计数器的值即可。

时间复杂度: O(n)

空间复杂度: O(1)

注意事项:

在 C++ 中,取模运算可能得到负数,因此需要使用 (a % b + b) % b 来确保结果为非负数。

**参考代码:**c++#include

using namespace std;

int main() { int n, direction = 0, count = 0; cin >> n; for (int i = 0; i < n; i++) { int command; cin >> command; switch (command) { case 0: direction = (direction + 1) % 4; break; case 1: direction = (direction + 3) % 4; break; case 2: direction = (direction + 2) % 4; break; } if (direction == 0) { count++; } } cout << count << endl; return 0;}

C++ 解题:转向游戏II - 方向感测试

原文地址: https://www.cveoy.top/t/topic/knpp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录