目的是抛砖引玉,直接抄骗别人也是骗自己。
题目描述
对于给定的N,请打印一个N*N的螺旋矩阵。
输入
多组测试数据(数据总数在30以内),每组测试数据有一行,为一个整数N(1 <= N <= 30)。
输出
对于每组测试数据输出相应的螺旋矩阵,每两个矩阵之间用空行隔开,注意不要在第一行或者最后一行打印多余的空行。每个矩阵为N行N列,每个数字宽度为4(c的printf使用%4d),注意不要打印多余的空格.
样例输入 Copy
2 3 4
样例输出 Copy
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
#include <stdio.h>
#include <stdlib.h>
int m[31][31]= {0};
int main()
{
int n,y=0;
int cishu,gj,l,k;
while(scanf("%d",&n)!=EOF)
{
int k=n*n,guangj=0;
int a=n/2,b=n/2;
a=n/2,b=n/2;
m[a][b]=k;
k--;
while(k>=1)
{
guangj+=2;
b++;
for( gj=guangj-1; gj>0; gj--)
{
m[a][b]=k;
a++;
k--;
}
m[a][b]=k;
k--;
for( gj=guangj; gj>0; gj--)
{
b--;
m[a][b]=k;
k--;
}
for( gj=guangj; gj>0; gj--)
{
a--;
m[a][b]=k;
k--;
}
for( gj=guangj; gj>0; gj--)
{
b++;
m[a][b]=k;
k--;
}
}
if(y)printf("\n");
if(n%2==1){
for( l=0; l<n; l++)
{
for(k=n-1; k>=0; k--)
printf("%4d",m[l][k]);
printf("\n");
}}
else {
for( l=n; l>0; l--)
{
for(k=1; k<n+1; k++)
printf("%4d",m[l][k]);
printf("\n");
}}
y++;
}
return 0;
}