题目描述:
从中心向外螺旋
Problem Description
bLue 有一个长度为 nn 的序列,现在他想把这个序列填到一个 nn 的螺旋矩阵中,你能帮助他吗?
Input
输入数据有多组(数据组数不超过 20),到 EOF 结束。
对于每组数据:
第 1 行输入 1 个奇数 n (1 <= n <= 9, n%2 = 1)
第 2 行输入 n*n 个用空格隔开的整数(范围 [0, 100]),表示初始序列
Output
对于每组数据,输出一个 n*n 的矩阵,同一行内相邻整数之间用一个 ‘\t’ 隔开。每组数据结尾额外输出一行空行。
Sample Input
3
1 2 3 4 5 6 7 8 9
5
5 3 2 4 8 7 1 6 9 10 11 12 13 14 15 16 17 18 19 20 21 25 27 29 33
Sample Output
7 8 9
6 1 2
5 4 3
21 25 27 29 33
20 1 6 9 10
19 7 5 3 11
18 8 4 2 12
17 16 15 14 13
Hint
仔细观察示例,填螺旋矩阵时,初始位置为矩阵中心,按照向右、向下、向左、向上的顺序,把序列中的数从内到外一圈一圈填入矩阵中即可。
代码实现:
#include<stdio.h>
int main()
{
int i,j,n;
int a[1000][1000];
int b[1000];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n*n;i++)
{
scanf("%d",&b[i]);
}
a[n/2+1][n/2+1]=b[0]; //先把中心的数据填上
int y=1;
for(i=1;i<=n/2;i++)
{
for(j=n/2-i+2;j<=n/2+1+i;j++) //向下填充
{
a[j][n/2+i+1]=b[y++];
}
for(j=n/2+i;j>=n/2-i+1;j--) //向左填充
{
a[n/2+i+1][j]=b[y++];
}
for(j=n/2+i;j>=n/2-i+1;j--) //向上填充
{
a[j][n/2-i+1]=b[y++];
}
for(j=n/2-i+2;j<=n/2+1+i;j++) //向右填充
{
a[n/2-i+1][j]=b[y++];
}
}
for(i=1;i<=n;i++) //输出
{
for(j=1;j<=n;j++)
{
if(j==n)
printf("%d\n",a[i][j]);
else
printf("%d\t",a[i][j]);
}
}
printf("\n");
}
return 0;
}