C++解题:转向游戏II - 方向感测试
转向游戏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;}
代码解析
- 使用
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 著作权归作者所有。请勿转载和采集!