Description
以下是一个5*5阶螺旋方阵。设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进)。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Input
输入一个整数n,(n>=1&&n<=20)
Output
输出对应的n*n阶螺旋方阵。
Sample Input
5
Sample Output
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
HINT
两个数字中间至少留有一个空格!
Source
千千
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int v = 1;
int x=0;
int y=0;
int a[50][50];
memset(a,0,sizeof(a));
a[x][y] = v;
while(v < (n*n))
{
while(y+1<n && !a[x][y+1])
a[x][++y] = ++v;
while(x+1<n && !a[x+1][y])
a[++x][y] = ++v;
while(y-1>=0 && !a[x][y-1])
a[x][--y] = ++v;
while(x-1>=0 && !a[x-1][y])
a[--x][y] = ++v;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf(" %d",a[i][j]);
printf("\n");
}
return 0;
}