阿里笔试4.27场 第一题
给定路径和骰子的初始状态,滚动骰子,记录骰子面朝下的数字
************************************
之前忘记组数T了,更新上
#include <iostream> #include <string> #include <vector> using namespace std; struct Pos { int x; int y; Pos(int x_, int y_) : x(x_), y(y_) {} }; int status[6] = { 6,1,2,5,4,3 }; enum step { left, right, up, down }; void resetStatus() { status[0] = 6; status[1] = 1; status[2] = 2; status[3] = 5; status[4] = 4; status[5] = 3; } void swap(int a, int b) { int tmp = status[a]; status[a] = status[b]; status[b] = tmp; } void oneStep(step s) { switch (s) { case step::right: swap(0, 5); swap(1, 4); swap(4, 5); break; case step::left: swap(0, 5); swap(1, 4); swap(0, 1); break; case step::up: swap(0, 3); swap(1, 2); swap(2, 3); break; case step::down: swap(0, 3); swap(1, 2); swap(0, 1); break; default: break; } } int main() { int T; cin >> T; vector<vector<string> > worldmaps; for (int t = 0; t < T; t++) { int n; cin >> n; vector<string> worldmap; for (int i = 0; i < n; i++) { string tmp; cin >> tmp; worldmap.push_back(tmp); } resetStatus(); Pos pos(0, 0); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (worldmap[i][j] == 'S') { pos = Pos(i, j); break; } } } while (worldmap[pos.x][pos.y] != 'E') { worldmap[pos.x][pos.y] = '0' + status[0]; int x = pos.x; int y = pos.y; if (x - 1 >= 0 && (worldmap[x - 1][y] == '#' || worldmap[x - 1][y] == 'E')) { pos.x = x - 1; oneStep(step::up); } else if (x + 1 < n && (worldmap[x + 1][y] == '#' || worldmap[x + 1][y] == 'E')) { pos.x = x + 1; oneStep(step::down); } else if (y - 1 >= 0 && (worldmap[x][y - 1] == '#' || worldmap[x][y - 1] == 'E')) { pos.y = y - 1; oneStep(step::left); } else if (y + 1 < n && (worldmap[x][y + 1] == '#' || worldmap[x][y + 1] == 'E')) { pos.y = y + 1; oneStep(step::right); } } worldmap[pos.x][pos.y] = '0' + status[0]; worldmaps.push_back(worldmap); } //output for (auto map : worldmaps) { for (auto s : map) { cout << s << endl; } } return 0; }