棋子翻转-美团试题-带格式化输入输出
在4*4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
输入描述:
给定两个数组,分两行
第一行为分别为初始棋盘,为4*4矩阵,其中0表示白色棋子,1表示黑色棋子
第二行为翻转位置,其中翻转位置共有3个
输出描述:
请返回翻转后的棋盘,为4*4矩阵
示例1
输入
[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]] [[2,2],[3,3],[4,4]]
输出
[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]
#include <iostream> #include <vector> using namespace std; int main() { string input;int n = 2; vector<vector<char>> qipan; vector<vector<int>> caozuo; vector<char> temp1; vector<int> temp2; while (n--) { getline(cin, input); for(int i = 0; i < input.size(); i++){ if(n == 1){ if(input[i] == '0' || input[i] == '1'){ temp1.push_back(input[i]); } if(temp1.size() == 4){ qipan.push_back(temp1); temp1.clear(); } } else{ if(input[i] != '[' && input[i] != ']' && input[i] != ','){ temp2.push_back((int)input[i] - '0'); } if(temp2.size() == 2){ caozuo.push_back(temp2); temp2.clear(); } } } } for(int i = 0; i < caozuo.size(); i++){ int row = caozuo[i][0]-1; int col = caozuo[i][1]-1; if(0<=row-1 && row-1<=3) qipan[row-1][col] = qipan[row-1][col] == '0' ? '1' : '0'; if(0<=row+1 && row+1<=3) qipan[row+1][col] = qipan[row+1][col] == '0' ? '1' : '0'; if(0<=col-1 && col-1<=3) qipan[row][col-1] = qipan[row][col-1] == '0' ? '1' : '0'; if(0<=col+1 && col+1<=3) qipan[row][col+1] = qipan[row][col+1] == '0' ? '1' : '0'; } cout.put('['); for(int i = 0; i < qipan.size(); i++){ cout.put('['); for(int j = 0; j < qipan[i].size(); j++){ cout.put(qipan[i][j]); if(j != 3) cout.put(','); } cout.put(']'); if(i != 3) cout.put(','); } cout.put(']'); return 0; }