转向游戏II - C++解题

题目描述

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

50 1 0 0 1

样例输出 #1

0

提示

子任务

对于 30% 的数据,n ≤ 10;对于 50% 的数据,n ≤ 100;对于 70% 的数据,n ≤ 1,000;对于 100% 的数据,n ≤ 10,000。特别地,对于其中 20% 的数据,小红发出的命令仅有一种。

C++ 代码cpp#include <bits/stdc++.h>using namespace std;

int main() { int n, ans = 0, dir = 0; cin >> n; while (n--) { int op; cin >> op; if (op == 0) dir = (dir + 1) % 4; else if (op == 1) dir = (dir + 3) % 4; else dir = (dir + 2) % 4; if (dir == 0) ans++; } cout << ans << endl; return 0;}

代码解析

  1. 使用 dir 变量来记录小明当前面对的方向,初始值为 0,代表东。2. 循环读取每个指令 op。3. 根据指令类型更新 dir 值: * op == 0:向右转,dir = (dir + 1) % 4 * op == 1:向左转,dir = (dir + 3) % 4 * op == 2:向后转,dir = (dir + 2) % 44. 使用模运算 % 4 保证 dir 在 0 到 3 之间循环。5. 如果 dir == 0,说明小明面向北方,ans 加 1。6. 最后输出 ans 的值。

性能分析

代码时间复杂度为 O(n),空间复杂度为 O(1),可以有效解决题目中 10,000 个命令的规模。

总结

通过模拟小明转向的过程,我们可以轻松解决这道题。C++ 代码简洁易懂,并具有较高的效率。


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

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