Problem H: 蛇形填阵
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 467
[ Submit][ Status][ Web Board]
Description
将1~n*n填入一个n*n的矩阵中,并要求成为蛇形。蛇形即是从右上角开始向下,向左,向上,向右,循环填入数字。
比如n=5时矩阵为:
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
Input
输入有多行,每行为一个整数n(1<=n<=50),每组答案用空行隔开。
Output
输出一个n*n的矩阵,n行n列每个数字用一个空格隔开,不能有多余空格。
Sample Input
5
Sample 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000
int hang,lie,n,i,j,a[N][N];
int main()
{
int k = 0;
memset(a,0,sizeof(a));
while(scanf("%d",&n) != EOF)
{
if((k++) != 0)
printf("\n");
int shu=1,ZL=0,YL=0,SH=0,XH=0,v=0;
hang = 0;
lie = n-1;
while(shu <= n*n)
{
//down
while(hang < n-XH)
{
a[hang][lie]=shu;
hang++;
shu++;
}
hang--;
YL++;
lie--;
//left
while(lie >= ZL)
{
a[hang][lie]=shu;
lie--;
shu++;
}
lie++;
hang--;
XH++;
//up
while(hang >= SH)
{
a[hang][lie]=shu;
shu++;
hang--;
}
hang++;
ZL++;
lie++;
//right
while(lie < n-YL)
{
a[hang][lie]=shu;
shu++;
lie++;
}
lie--;
hang++;
SH++;
v++;
}
for(hang = 0; hang < n; hang++)
{
for(lie = 0; lie < n-1; lie++)
{
printf("%d ",a[hang][lie]);
}
printf("%d",a[hang][lie]);
printf("\n");
}
}
return 0;
}
/**************************************************************
Problem: 1184
User: 201401061013
Language: C
Result: Accepted
Time:16 ms
Memory:4652 kb
****************************************************************/