糖逗 发表于 2020-5-23 15:55:58

C++刷面试题(棋子翻转)【数据结构】【美团】【2020】

本帖最后由 糖逗 于 2020-5-23 16:00 编辑

题目描述:
在4*4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。


输入描述:
给定两个数组,分两行

第一行为分别为初始棋盘,为4*4矩阵,其中0表示白色棋子,1表示黑色棋子

第二行为翻转位置,其中翻转位置共有3个



输出描述:
请返回翻转后的棋盘,为4*4矩阵
示例1
输入
[,,,]
[,,]
输出
[,,,]
题目来源:牛客网

#include <vector>
#include <iostream>
using namespace std;


vector<vector<int> > solution(vector<vector<int> > &matrix, vector<vector<int> > &change){
    int len = 4;
    for(int i = 0; i < change.size(); i++){
      int a = change-1;
      int b = change-1;
      if(a - 1 >= 0){
            if(matrix == 0){
                matrix = 1;
            }else matrix = 0;
      }
      if(a+1 < len){
            if(matrix == 0){
                matrix = 1;
            }else matrix = 0;
      }
      if(b - 1 >= 0){
            if(matrix == 0){
                matrix= 1;
            }else matrix= 0;
      }
      if(b+1 < len){
            if(matrix == 0){
                matrix = 1;
            }else matrix = 0;
      }
    }
    return matrix;
}

int main(void){
    string input, input2;
    cin >> input;
    cin.clear();
    cin >> input2;
    vector<vector<int> > matrix;
    vector<int> temp;
    for(int i = 0; i < input.size(); i++){
      if(input == '[' || input == ']' || input == ',') continue;
      if(temp.size() == 4){
            matrix.push_back(temp);
            temp.clear();   
      }
      temp.push_back(input- '0');
    }
    matrix.push_back(temp);


    vector<vector<int> > change;
    vector<int> temp1;
    for(int i = 0; i < input2.size(); i++){
      if(input2 == '[' || input2 == ']' || input2 == ',') continue;
      if(temp1.size() == 2){
            change.push_back(temp1);
            temp1.clear();   
      }
      temp1.push_back(input2- '0');
    }
    change.push_back(temp1);

    vector<vector<int> > res = solution(matrix, change);
    string out = "[";
    for(int i = 0; i < res.size(); i++){
      string temp3 = "[";
      for(int j = 0; j < res.size(); j++){
            if(j != res.size()-1)temp3 += to_string(res) + ",";
            else temp3 += to_string(res) + "]";   
      }
      if(i != res.size()-1) out += temp3 + ",";
      else out += temp3 + "]";
    }
    cout << out << endl;


    return 0;
}

糖逗 发表于 2020-5-23 15:56:32

这C++读入要写到“吐血”

糖逗 发表于 2020-5-23 16:00:02

这题感觉用python读入会更方便

糖逗 发表于 2020-5-23 16:03:23

{:10_266:}
页: [1]
查看完整版本: C++刷面试题(棋子翻转)【数据结构】【美团】【2020】