用C语言实现顺时针螺旋方阵的打印及
#include
#define N 20
main()
{
int a[N][N];
int i,j,k,n;
printf("Please input n(0
scanf("%d",&n);
k=1;
for(i=0;i
{
for(j=i;j
a[i][j]=k++;
for(j=i;j
a[j][n-i-1]=k++;
for(j=n-i-1;j>i;j--)
a[n-i-1][j]=k++;
for(j=n-i-1;j>i;j--)
a[j][i]=k++;
}
if(n%2==1)
a[n/2][n/2]=k;
for(i=0;i
{
for(j=0;j
printf("%4d",a[i][j]);
printf("/n");
}
}
打印螺旋方阵
算法:(以五阶方阵为例进行分析)
a00a01a02a03a04
a10a11a12a13a14
a20a21a22a23a24
a30a31a32a33a34
a40a41a42a43a44
1:找出方阵的层数i与方阵的方阵的阶数n的关系:i=(n+1)/2(具体在程序运行过程中i可取值0,1,2进行循环);
2:用循环控制给每个数族元素进行赋值,需考虑一下几个问题:
(1)定义变量k让其进行自增给数组元素赋值,并进行由外到内的循环for(i=o;i
(2)观察方阵的走势可知:顺时针由外到内:
a行标i=0,列标j 0-3;for(j=i;j
b列标j=4,行标i 0-3;for(j=i;j
c行标i=4,列标j 4-1;for(j=n-i-1;j>I;j--)a[n-i-1][j]=k++;
d列标j=0,行标i 4-1for(j=n-i-1;j>i;j--)a[j][i]=k++;
在循环的过程中,如果n为奇数,则n的平方位于a[n/2][n/2]的位置上,有上述循环不能实现,所以得特别注明它的实现if(n%2==1)a[n/2][n/2]=k;;(如果n为偶数则没有必要)
(3)方阵的的输出:用两个for语句实现方阵的输出