问题:
环形打印矩阵,比如:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
从外到内循环打印。
分析:
问题可以分解为4个问题,首先矩形向右走,到头后,再向下走,再向左走,最后向上走,如此循环,关键在于判断边界条件。
代码:
#include <stdio.h>
#define MAX 20
int n,square[MAX][MAX];
int ok(int x,int y)
{
return (0<=x&&x<n&&0<=y&&y<n&&square[x][y]==0);
}
main()
{
int i,j,k,d;
printf("请输入螺旋方阵的阶数n:");
scanf("%d",&n);
memset(square,0,MAX*MAX*sizeof(int));
for(i=j=d=0,k=1;k<=n*n;++k)
{
square[i][j]=k;
switch(d%4)
{
case 0:if(ok(i,j+1)) ++j;
else ++d,++i;
break;
case 1:if(ok(i+1,j)) ++i;
else ++d,--j;
break;
case 2:if(ok(i,j-1)) --j;
else ++d,--i;
break;
case 3:if(ok(i-1,j)) --i;
else ++d,++j;
}
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",square[i][j]);
printf("\n");
}
printf("\n");
/*system("pause");*/
}