题目要求
在n*n
方阵里填入1,2,3,…,n*n
, 要求填成蛇形. 例如 n=4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
Standard Input
有多组测试数据. 输入的第一行是整数T(1<=T<=20), 表示随后测试数据的组数. 每组测试数据占一行, 由正整数n组成. N<=20.
Standard Output
对应每组测试数据, 输出对应的蛇形矩阵, 每个数占四位, 右对齐.
Samples
Input | Output |
---|---|
5 1 2 3 4 5 | 1 4 1 3 2 7 8 1 6 9 2 5 4 3 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 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 |
Problem ID | 1907 |
Problem Title | 蛇形填数 |
Time Limit | 1000 ms |
Memory Limit | 64 MiB |
Output Limit | 64 MiB |
Source | wxiaoping - 2018.4.24 |
#include<stdio.h>
#include<string.h>
#define N 20
int a[N][N];
void fun(int n)
{
memset(a,0,sizeof(a));//矩阵置0
int sum=1;
int i=0,j=n-1;
a[0][n-1]=1;
while(sum<n*n)
{
while(i+1<n&&a[i+1][j]==0)//向下
{
a[++i][j]=++sum;
}
while(j-1>=0&&a[i][j-1]==0)//向左移动
{
a[i][--j]=++sum;
}
while(i-1>=0&&a[i-1][j]==0)//向上
{
a[--i][j]=++sum;
}
while(j+1<n&&a[i][j+1]==0)//向右移动
{
a[i][++j]=++sum;
}
}
for(int i=0;i<n;i++)//输出矩阵
{
for(int j=0;j<n;j++)
if(j!=n-1)
printf("%4d",a[i][j]);
else
printf("%4d\n",a[i][j]);
}
}
int main()
{
int T,n,m[N];
scanf("%d",&T);
for(int p = 0;p < T;p++){
scanf("%d",&m[p]);//矩阵阶数
}
for(int x = 0;x < T;x++){
fun(m[x]);
}
return 0;
}