1687: 螺旋矩阵Ⅱ
时间限制: 1 Sec 内存限制: 128 MB
提交: 34 解决: 16
[提交][状态][讨论版]
题目描述
对于给定的N,请打印一个N*N的螺旋矩阵。
输入
多组测试数据(数据总数在30以内),每组测试数据有一行,为一个整数N(1 <= N <= 30)。
输出
对于每组测试数据输出相应的螺旋矩阵,每两个矩阵之间用空行隔开,注意不要在第一行或者最后一行打印多余的空行。每个矩阵为N行N列,每个数字宽度为4(c的printf使用%4d),注意不要打印多余的空格.
样例输入
2
3
4
样例输出
1 2
4 3
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
来源
CYH
来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1687
int J[MAX][MAX];
void print(int z)
{
int count=0,limit=z,m=1,n=0,i,j;
while(count<=z*z&&limit>0){
for(i=1;i<=limit;i++) J[m][++n]=++count;
for(i=1,--limit;i<=limit;i++) J[++m][n]=++count;
for(i=1;i<=limit;i++) J[m][--n]=++count;
for(i=1,--limit;i<=limit;i++) J[--m][n]=++count;
}
for(i=1;i<=z;i++)
{
for(j=1;j<=z;j++)
printf("%4d",J[i][j]);
if(i!=z) putchar('\n');
}
}
int main(void)
{
//freopen("E:\\test.txt","w",stdout);
int n;
scanf("%d",&n);
print(n);
while(~scanf("%d",&n))
{
putchar('\n');
putchar('\n');
print(n);
}
return 0;
}