要求:
输入:n(0 < n < 20)
输出:满足以上条件的n阶矩阵
样例:
输入:9
输出:
#include <stdio.h>
// 普通打印
void printArr(int arr[][20], int n);
int main(void) {
int n, max, arr[20][20] = { 0 };
printf("输入n:");
scanf_s("%d", &n);
if (n == 0) {
printf("n不能为零\n");
return 0;
}
if (n > 20) {
printf("n不能超过20\n");
return 0;
}
if (n == 1) {
printf("1\n");
return 0;
}
max = (n % 2 == 0) ? n / 2 : (n / 2 + 1);
// 当矩阵是奇数时先把中间的十字先赋值
if (n % 2 == 1) {
int num = n / 2;
for (int i = 0; i < max; i++) {
arr[num - i][num] = i + 1;
arr[num + i][num] = i + 1;
arr[num][num - i] = i + 1;
arr[num][num + i] = i + 1;
}
}
// 处理其他地方的数据
for (int i = 0; i < n / 2; i++) {
// flag是一个赋值标准 0 为递减 1 为递增
int flag = 0, num = i + 1;
for (int j = 0; j < n / 2; j++) {
if (num == 1) {
flag = 1;
}
if (num == n / 2) {
flag = 0;
}
arr[i][j] = num;
arr[n - i - 1][j] = num;
arr[i][n - j - 1] = num;
arr[n - i - 1][n - j - 1] = num;
if (flag) {
num++;
}
else {
num--;
}
}
}
//printf("\n\n\n\n\n");
printArr(arr, n);
return 0;
}
// 打印数组(普通打印)
void printArr(int arr[][20], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}