题解 | C翻转

C翻转

https://www.nowcoder.com/practice/a591300637874f6ba2316a5fe3e94579

#include <iostream>
using namespace std;
#include <bits/stdc++.h>

void flipOver(vector<vector<int>>& matrix, int start_x, int start_y, int num,
              int dir) {
    vector<int> temp;
    if (dir == 0) {   //顺时针翻转局部矩阵
        for (int j = start_y; j <= start_y -1+ num; j++) {
            for (int i = start_x + num-1; i >= start_x ; i--) {
                temp.push_back(matrix[i][j]);

            }

        }
    } else if (dir == 1) {  //逆时针
        for (int j = start_y + num-1; j >=start_y; j--) {
            for (int i = start_x; i <= start_x + num-1 ; i++) {
                temp.push_back(matrix[i][j]);
            }
        }
    }
    int index = 0;
    for (int i = start_x; i < num + start_x; i++) {
        for (int j = start_y; j < start_y + num; j++) {

            matrix[i][j] = temp[index];
            index++;
        }

    }
    return;
}

int main() {
    vector<vector<int>> matrix(6, vector<int>(6, 0));
    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= 5; j++) {
            cin >> matrix[i][j];

        }
    }

    int op1, op2,x,y;
    cin >> op1 >> op2>>x>>y;
    int num, dir;
    if (op1 == 1 && op2 == 2) {
        num = 2;
        dir = 0; //0顺时针,1逆时针
    } else if (op1 == 1 && op2 == 3) {
        num = 3;
        dir = 0;
    } else if (op1 == 2 && op2 == 2) {
        num = 2;
        dir = 1;
    } else if (op1 == 2 && op2 == 3) {
        num = 3;
        dir = 1;
    }

    flipOver(matrix, x, y, num,  dir);

    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= 5; j++) {
            cout << matrix[i][j] << " ";

        }
        cout << endl;
    }

    return 0;
}



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务