螺旋方阵
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
Input
输入第一行为整数m(0<m<10),代表有m组输入;
接下来是m行数据,每行输入一个n(0<n<11)。
接下来是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 610 9 8 7
螺旋填数
定义左边界left
右边界right
上边界 up
下边界down
一次调用函数四个循环
代码如下
#include<stdio.h> int a[20][20]; void f(int left,int right,int up,int down,int V) { int i ,j ,k ,l; if(left<=right) 注意递归的边界是left<=right 不要把if写成while造成死循环 { for(i = left;i<=right;i++) a[up][i] = V++; for(j = up+1;j<=down;j++) a[j][right] = V++; for(k = right-1;k>=left;k--) a[down][k] = V++; for(l = down-1;l>up;l--) a[l][left] = V++; f(left+1,right-1,up+1,down-1,V); } } int main() { int n,m,i,j; scanf("%d",&m); while(m--) { scanf("%d",&n); f(1,n,1,n,1); for(i = 1;i<=n;i++) { for(j = 1;j<n;j++) printf("%d\t",a[i][j]); printf("%d\n",a[i][j]); } printf("\n"); } return 0; }