引导:
蛇形矩阵是一个n*n的矩阵,将整数1到n*n按照蛇形的顺序装入一个 n*n 的蛇形矩阵中,如样例所示分别为5阶和10阶蛇形矩阵。
输入格式:
只有一行,为一个整数n,代表蛇形矩阵的阶数,n的范围是1—100。
输出格式:
共n行,为蛇形矩阵。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。
样例:
输入:5
输出:1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 2
#include<stdio.h>
//首先定义 右,下,左下,右上 四个状态
#define you 1
#define xia 2
#define zuoxia 3
#define youshang 4
int main(){
int n;
scanf("%d",&n);
int state=xia,a[n][n],row=0,col=0;
a[0][0]=1;//初始化矩阵
for(int i=2;i<=n*n;i++){//执行循环,将剩下的2-100填入矩阵;
switch(state){
//每个状态中完成对应的移位赋值;并根据条件判断并设置下一个状态。
case xia:
row++;
a[row][col]=i;
if(col==0) state=youshang;
if(col==n-1) state=zuoxia;
break;
case youshang:
row--;col++;
a[row][col]=i;
state=youshang;
if(row==0) state=you;
if(col==n-1) state=xia;
break;
case zuoxia:
row++;col--;
a[row][col]=i;
state=zuoxia;
if(col==0) state=xia;
if(row==n-1) state=you;
break;
case you:
col++;
a[row][col]=i;
if(row==0) state=zuoxia;
if(row==n-1) state=youshang;
break;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d",a[i][j]);
if(j==n-1){
printf("\n");
}else{
printf(" ");
}
}
}
}