转向游戏 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;
}

总结

本题是一道基础的模拟题,考察了我们对于循环和条件语句的掌握,以及对于问题的建模能力。

C++ 编程练习:转向游戏 II - 方向模拟

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

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