c语言编写对于一个奇数n阶方阵,请给出经过顺时针方向m次旋转后的结果。 输入格式: 测试数据有多组,处理到文件尾。每组测试的第一行输入2个整数n,m(1<n<20,1≤m≤100),接下来输入n行数据,每行n个整数。 输出格式: 对于每组测试,输出奇数阶方阵经过m次顺时针方向旋转后的结果。每行中各数据之间留一个空格。
时间: 2023-12-03 13:43:25 浏览: 103
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 20
int a[MAXN][MAXN];
int main() {
int n, m;
while (scanf("%d%d", &n, &m) == 2) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
while (m--) {
// 每次旋转90度
for (int i = 0; i < n / 2; i++) {
for (int j = i; j < n - i - 1; j++) {
int temp = a[i][j];
a[i][j] = a[n - j - 1][i];
a[n - j - 1][i] = a[n - i - 1][n - j - 1];
a[n - i - 1][n - j - 1] = a[j][n - i - 1];
a[j][n - i - 1] = temp;
}
}
}
// 输出结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
return 0;
}
```
思路:每次旋转90度,可以使用两个循环分别遍历上半部分和下半部分,然后在每个位置交换4个元素即可。注意,由于数据保证是奇数阶方阵,因此旋转90度后仍然是奇数阶方阵。
阅读全文