螺旋方阵
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
Input
输入第一行为整数m(0<m<10),代表有m组输入;
接下来是m行数据,每行输入一个n(0<n<11)。
Output
按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以’\t’分隔)
两个输出方阵之间输出一个空行。
Example Input
1
4
Example Output
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Hint
Author
螺旋矩阵我表示已经翻皮水。。。只能上网找代码了,还没有理解完全
#include<stdio.h>
#include<string.h>
int k = 1;
void luoxuan(int a[][11], int n, int x, int y)
{
int i;
if(n <= 0) return;
if(n == 1)
{
a[x][y] = k;
return;
}
for(i = x; i < x+n-1; i++)
a[y][i] = k++;
for(i = y; i < y+n-1; i++)
a[i][x+n-1] = k++;
for(i = x + n - 1; i > x; i--)
a[y+n-1][i] = k++;
for(i = y + n - 1; i > y; i--)
a[i][x] = k++;
luoxuan(a, n - 2, x + 1, y + 1);
}
int main()
{
int m, i, z, j;
int a[11][11];
int b[22];
memset(a, 0, sizeof(a));
scanf("%d", &m);
for(i = 0; i < m; i++)
{
scanf("%d", &b[i]);
}
for(z = 0; z < m; z++)
{
k = 1;
luoxuan(a, b[z], 0, 0);
for(i = 0; i < b[z]; i++)
{
for(j = 0; j < b[z]; j++)
{
if(j == b[z] - 1)
printf("%d\n", a[i][j]);
else printf("%d\t", a[i][j]);
}
}
if(z != m - 1)printf("\n");
}
return 0;
}
我感觉那个x+n-1是因为n-2而x+1这样可以平衡那多减去的1.。。。鬼知道对不对(摊手)