转骰子
转骰子
【转骰子】骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度),现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。骰子的初始状态和初始状态转动后的状态如图所示
输入描述:
输入一行,为只包含LRFBAC的字母序列,最大长度为50,字母可重复
输出描述:
输出最终状态
示例1
输入
L R
输出
123456
C++
/* 【转骰子】骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态, 放置在平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次), 可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(用A表示逆时针旋转90度), 可以顺时针旋转(用C表示顺时针旋转90度),现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。 输入描述: 输入一行,为只包含LRFBAC的字母序列,最大长度为50,字母可重复 输出描述: 输出最终状态 示例1: 输入 L R 输出 123456 */ #include<bits/stdc++.h> using namespace std; void rotate(char& vec, string& start); int main() { char s; vector<char>vec; s = getchar(); while (s !='\n') { if(s != ' ') { vec.push_back(s); } s = getchar(); } string start = "123456"; for (int i = 0; i < vec.size();i++) { rotate(vec[i], start); } cout << start << endl; system("pause"); return 0; } void rotate(char& vec,string& start) { if(vec == 'L') { char temp = start[0]; start[0] = start[4]; start[4] = start[1]; start[1] = start[5]; start[5] = temp; } if (vec == 'R') { char temp = start[0]; start[0] = start[5]; start[5] = start[1]; start[1] = start[4]; start[4] = temp; } if (vec == 'F') { char temp = start[2]; start[2] = start[4]; start[4] = start[3]; start[3] = start[5]; start[5] = temp; } if (vec == 'B') { char temp = start[2]; start[2] = start[5]; start[5] = start[3]; start[3] = start[4]; start[4] = temp; } if (vec == 'A') { char temp = start[0]; start[0] = start[3]; start[3] = start[1]; start[1] = start[2]; start[2] = temp; } if (vec == 'C') { char temp = start[0]; start[0] = start[2]; start[2] = start[1]; start[1] = start[3]; start[3] = temp; } }