C++ 编程练习:转向游戏 II - 方向模拟
转向游戏 II - 方向模拟
题目描述
小明自认为方向感很好,请小红来测试。小红先让小明面对'东'方立正站好,然后发出'向左转'、'向右转'或'向后转'的命令。每个命令执行后,小明都正确地说出了他面对的方向。 命令是以数字方式表达:0 代表 '向右转',1 代表 '向左转',2 代表 '向后转'。
输入格式
从标准输入读入数据。 输入共两行。第一行是一个正整数 n(1≤n≤10,000),代表命令的条数;第二行是 n 个整数,每个整数是 0、1 或 2,代表小红发出的口令。
输出格式
输出到标准输出。 一个整数,代表小明回答'北'的次数。
样例 #1
样例输入 #1
5
0 1 0 0 1
样例输出 #1
0
提示
子任务
对于 30% 的数据,n≤10; 对于 50% 的数据,n≤100; 对于 70% 的数据,n≤1,000; 对于 100% 的数据,n≤10,000。 特别地,对于其中 20% 的数据,小红发出的命令仅有一种。
解题报告
思路
题目要求我们通过输入的指令来判断最终方向,我们可以用一个变量来存储方向,然后根据指令来调整这个变量。
我们可以按照如下方式来定义变量:
- 0:东
- 1:南
- 2:西
- 3:北
然后根据指令来调整方向:
- 0:东 -> 南 -> 西 -> 北 -> 东
- 1:东 -> 北 -> 西 -> 南 -> 东
- 2:东 -> 西 -> 东
我们可以用一个循环来处理输入的指令,然后根据指令来调整方向变量。最后输出方向变量为 3 的次数即可。
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int direction = 0; // 初始方向为东
while (n--) {
int command;
cin >> command;
if (command == 0) { // 向右转
direction = (direction + 1) % 4;
} else if (command == 1) { // 向左转
direction = (direction + 3) % 4;
} else { // 向后转
direction = (direction + 2) % 4;
}
}
int count = 0;
if (direction == 3) {
count++;
}
cout << count << endl;
return 0;
}
总结
本题是一道基础的模拟题,考察了我们对于循环和条件语句的掌握,以及对于问题的建模能力。
原文地址: https://www.cveoy.top/t/topic/knpW 著作权归作者所有。请勿转载和采集!