蛇形矩阵
C-study-code
Erin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗?
input:整数n(2
output:n*n的方阵,从方阵右上角开始以顺时针方向进行数数
如下所示
input:
3
output:
7 8 1
6 9 2
5 4 3
input:
5
output:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5#include
int main() {
int N, a[100][100];//二维数组
int x = 1, m, n, i, j, square, b;
scanf("%d", &N);
square = N * N;
a[1][N] = 1;//首先确定1的位置
m = 1;
n = N;
b = N;
while (x < square) {//因为这种算法N在变化,所以用square
while (m < N && n == N) {//当在右边一列的时候
if (x == square)
break;
x++;
m++;
a[m][n] = x;
}
while (m == N && n > b - N + 1) {//在下面那一排
if (x == square)
break;
x++;
n--;
a[m][n] = x;
}
while (m > b - N + 1 && n == b - N + 1) {
//在左边那一列
if (x == square)
break;
x++;
m--;
a[m][n] = x;
}
while (m == b - N + 1 && n < N - 1) {/*在上面那一排
注意是N-1了。因为上面那一排最后一个已经有了一个数*/
if (x == square)
break;
x++;
n++;
a[m][n] = x;
}
N -= 1;
}
N = b;
for (i = 1; i < N; i++) {
for (j = 1; j < N; j++)
printf("%d ", a[i][j]);
printf("%d", a[i][N]);
printf("\n");
}
for (j = 1; j < N; j++)
printf("%d ", a[i][j]);
printf("%d", a[i][N]);
}
/*关键在于通过上一个数放置的位置来判断下一个数应该怎么放
可以尝试使用其他的方法比如把矩阵分成四个部分,(两条对角线)*/
本文介绍了如何使用C语言实现一个蛇形矩阵的打印程序,从右上角开始顺时针填充数字。程序通过判断当前位置调整数的放置方向,逐步完成矩阵的填充。示例展示了输入不同整数n时的矩阵输出,帮助理解算法逻辑。
3967

被折叠的 条评论
为什么被折叠?



