专栏文章

题解:UVA10409 Die Game

UVA10409题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqbl8bv
此快照首次捕获于
2025/12/04 02:07
3 个月前
此快照最后确认于
2025/12/04 02:07
3 个月前
查看原文
好不容易找到一个可以写题解的题(开心)

题目分析

模拟一个骰子的旋转过程,其骰子的初始状态是:顶部为 11,北面为 22,西面为 33。骰子的相对两个面的和为 77(即 116622553344)。每次输入一个旋转方向(northsoutheastwest),根据旋转方向更新骰子的状态,并输出旋转后顶部的数字。

解题思路

  • 用六个变量来表示骰子的六个面:topbottomnorthsouthwesteast,分别表示顶、底、北、南、西、东面。
  • 初始状态:top = 1north = 2west = 3bottom = 6south = 5east = 4
  • 根据旋转方向更新骰子的各个面。
  • ForFor exampleexample,当骰子向北旋转时,原来的北面会变成底部,原来的底部会变成南面,原来的南面会变成顶部,原来的顶部会变成北面。

CodeCode

CPP
#include <iostream>
#include <string>
using namespace std;

int main() {
    int T;
    while (cin >> T && T != 0) {  // 读取T,当T为0时结束
        int top = 1, bottom = 6, north = 2, south = 5, west = 3, east = 4;  // 初始化骰子的状态

        for (int i = 0; i < T; ++i) {
            string direction;
            cin >> direction;  // 读取旋转方向

            // 根据旋转方向更新骰子的状态
            if (direction == "north") {
                int temp = top;
                top = south;
                south = bottom;
                bottom = north;
                north = temp;
            } else if (direction == "south") {
                int temp = top;
                top = north;
                north = bottom;
                bottom = south;
                south = temp;
            } else if (direction == "east") {
                int temp = top;
                top = west;
                west = bottom;
                bottom = east;
                east = temp;
            } else if (direction == "west") {
                int temp = top;
                top = east;
                east = bottom;
                bottom = west;
                west = temp;
            }
        }

        cout << top << endl;  // 输出旋转后的顶部数字
    }

    return 0;
}
  • 每次旋转操作的时间复杂度为 O(1)O (1),总共有 TT 次操作,因此总时间复杂度为 O(T)O(T)

评论

0 条评论,欢迎与作者交流。

正在加载评论...