题目内容:
从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。
函数原型: void ZigzagMatrix(int a[][N], int n);
函数功能:计算n*n的蛇形矩阵
提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。
程序运行结果示例1:
Input n:
5↙
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
程序运行结果示例2:
Input n:
4↙
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
程序运行结果示例3:
Input n:
-5↙
Input error!
程序运行结果示例4:
Input n:
105↙
Input error!
程序运行结果示例5:
Input n:
w↙
Input error!
#include<stdio.h>
#define N 50
void ZigzagMatrix(int a[][N], int n);
int main()
{
int a[N][N],n,i=0,j=0;
printf("Input n:\n");
scanf("%d",&n);
if(n>=1&&n<=100)
{
ZigzagMatrix(a,n);
for(i=0;i<n;i++) //将蛇形矩阵输出
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
else printf("Input error!\n");
return 0;
}
void ZigzagMatrix(int a[][N], int n)
{
int i=0,j=0,k=1;
a[0][0]=1;
while(i!=n-1||j!=n-1) //当矩阵到a[n-1][j-1]时停止循环
{
if(k==1)
{
a[i][j+1]=a[i][j]+1;
j=j+1;
if(i==n-1) k=4;
else k=2;
}
else if(k==2)
{
a[i+1][j-1]=a[i][j]+1;
i=i+1;
j=j-1;
if(j==0&&i!=n-1) k=3;
else if(i==n-1) k=1;
else k=2;
}
else if(k==3)
{
a[i+1][j]=a[i][j]+1;
i=i+1;
if(j==n-1) k=2;
else k=4;
}
else if(k==4)
{
a[i-1][j+1]=a[i][j]+1;
i=i-1;
j=j+1;
if(i==0&&j!=n-1) k=1;
else if(j==n-1) k=3;
else k=4;
}
}
}
这种解法应该是蛇形矩阵最容易理解的解法了,k代表每一步的情况,只需考虑清每一种情况即可。