C语言设计一个算法,实现在n*n方阵里 1,2,3,4,......, n*n,要求填写成蛇形方阵
时间: 2024-10-23 13:09:03 浏览: 16
C语言学习知识通用算法归纳.pdf
在C语言中,我们可以设计一个算法来创建一个n*n大小的蛇形矩阵(也称为螺旋矩阵)。这个矩阵的特点是从左上角开始,沿着顺时针方向填充数字,然后从右下角开始逆时针填充,直到所有数字都填满。以下是实现该算法的一个示例:
```c
#include <stdio.h>
// 函数声明
void printSpiral(int m, int n, int a[m][n]);
int main() {
int size;
printf("Enter the size of the square matrix: ");
scanf("%d", &size);
// 确保输入的值是正整数且行列相等
if (size > 0) {
int arr[size][size];
// 初始化数组
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = (i + j) % size + 1;
}
}
// 打印蛇形矩阵
printSpiral(size, size, arr);
} else {
printf("Invalid input! Matrix size must be positive.\n");
}
return 0;
}
// 蛇形打印函数
void printSpiral(int m, int n, int a[m][n]) {
int start_row = 0, end_row = m - 1, start_col = 0, end_col = n - 1;
while (start_row <= end_row && start_col <= end_col) {
// 从左上角到右下角
for (int i = start_col; i <= end_col; ++i) {
printf("%d ", a[start_row][i]);
}
start_row++;
// 从右下角到右上角
for (int i = start_row; i <= end_row; ++i) {
printf("%d ", a[i][end_col]);
}
end_col--;
// 从右上角到左下角
if (start_row <= end_row) {
for (int i = end_col; i >= start_col; --i) {
printf("%d ", a[end_row][i]);
}
end_row--;
}
// 从左下角到左上角
if (start_col <= end_col) {
for (int i = end_row; i >= start_row; --i) {
printf("%d ", a[i][start_col]);
}
start_col++;
}
}
}
```
阅读全文