题目描述
蛇形阵分一字阵和回字阵,如3*3:
一字阵: 回字阵:
1 2 6 7 6 5
3 5 7 8 1 4
4 8 9 9 2 3
输入
本题有多组数据,第一行n(n为奇数,<30),代表n*n矩阵。
输出
分别输出一字阵和回字阵(字段宽度为4),俩阵中间空一行。
样例输入
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
21 20 19 18 17
22 7 6 5 16
23 8 1 4 15
24 9 2 3 14
25 10 11 12 13
来源
合肥校区“新生杯” 14'
代码
#include<stdio.h>
int main()
{
int n,num,matrix[30][30];
int i,j;
while(scanf("%d",&n)>0)
{
num=0;
for(i=0; i<n; ++i)
if(i%2==0)
for(j=i; j>=0; --j)
matrix[j][i-j]=++num;
else
for(j=0; j<=i; ++j)
matrix[j][i-j]=++num;
for(i=n-2; i>=0; --i)
if(i%2==0)
{
int tem=n;
for(j=n-1-i; j<n; ++j)
matrix[--tem][j]=++num;
}
else
{
int tem=n;
for(j=n-1-i; j<n; ++j)
matrix[j][--tem]=++num;
}
for(i=0; i<n; ++i)
{
for(j=0; j<n; ++j)
printf("%4d",matrix[i][j]);
printf("\n");
}
printf("\n");
matrix[(n-1)/2][(n-1)/2]=num=1;
for(i=2; i<=(n+1)/2; ++i)
{
int row,column;
int R=row=(n-3)/2+i,C=column=n-row;
for(j=column; j<=row; ++j)
matrix[R][C++]=++num;
C-=1;
for(j=column; j<=row; ++j)
matrix[--R][C]=++num;
for(j=column; j<=row; ++j)
matrix[R][--C]=++num;
for(j=column; j<=row; ++j)
matrix[++R][C]=++num;
}
for(i=0; i<n; ++i)
{
for(j=0; j<n; ++j)
printf("%4d",matrix[i][j]);
printf("\n");
}
}
return 0;
}