C++ 解题:小明转游戏 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% 的数据,小红发出的命令仅有一种。

代码实现

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;

    int dir = 0; // 初始方向为东
    while (n -- )
    {
        int t;
        cin >> t;

        if (t == 0) dir = (dir + 1) % 4; // 右转
        else if (t == 1) dir = (dir + 3) % 4; // 左转,等价于右转三次
        else dir = (dir + 2) % 4; // 后转,等价于右转两次

        // 根据当前方向输出
        if (dir == 0) cout << "东" << endl;
        else if (dir == 1) cout << "南" << endl;
        else if (dir == 2) cout << "西" << endl;
        else cout << "北" << endl;
    }

    return 0;
}

代码解释:

  1. 变量 dir: 使用 dir 来存储小明当前面对的方向。初始值为 0,代表东。
  2. 循环处理命令: 使用 while 循环遍历每个命令 t
  3. 方向变化:
    • 右转 (t == 0): dir = (dir + 1) % 4,将方向向右移动一位,并使用模运算保证方向在 0 到 3 之间循环。
    • 左转 (t == 1): dir = (dir + 3) % 4,将方向向左移动一位,等价于右转三次。
    • 后转 (t == 2): dir = (dir + 2) % 4,将方向向后移动一位,等价于右转两次。
  4. 输出结果: 根据当前方向 dir 输出对应的文字,统计 '北' 的次数。

本代码利用了循环和条件语句来模拟小明方向的变化,并通过模运算保证方向值的正确性。简洁清晰,易于理解和扩展。

C++解题:小明转游戏 II - 方向模拟

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

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