题解 | 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;
}
查看21道真题和解析