题解 | C翻转
#include <bits/stdc++.h> using namespace std; int a[6][6], b[6][6]; int main() { for (int i = 1; i <= 5; i++)for (int j = 1; j <= 5; j++)cin >> a[i][j]; int k1, k2, x, y; cin >> k1 >> k2 >> x >> y; memcpy(b, a, sizeof(a)); for (int i = x; i < x + k2; i++) { for (int j = y; j < y + k2; j++) { if (k1 == 1) b[i][j] = a[x + y + k2 - 1 - j][i - x + y]; else b[i][j] = a[j - y + x][x + k2 - 1 - i + y]; } } for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { cout << b[i][j] << ' '; } cout << endl; } }
核心是矩阵旋转的代码,可以看到,上面的输入是可以映射到旋转的状态选择的,然后我们根据状态去转换这些数据的位置即可。然后其实我们的顺时针和逆时针就是数据错一下。