您的位置:首页 > 编程语言 > C语言/C++

用C语言实现顺时针螺旋方阵的打印(含算法)

2008-11-12 20:46 941 查看
用C语言实现顺时针螺旋方阵的打印及

#include<stdio.h>
#define N 20
main()
{
int a

;
int i,j,k,n;
printf("Please input n(0<n<20):");
scanf("%d",&n);
k=1;
for(i=0;i<n/2;i++)
{
for(j=i;j<n-i-1;j++)
a[i][j]=k++;
for(j=i;j<n-i-1;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<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("/n");
}
}

打印螺旋方阵
算法:(以五阶方阵为例进行分析)
a00 a01 a02 a03 a04

a10 a11 a12 a13 a14

a20 a21 a22 a23 a24

a30 a31 a32 a33 a34

a40 a41 a42 a43 a44
1:找出方阵的层数i与方阵的方阵的阶数n的关系:i=(n+1)/2(具体在程序运行过程中i可取值0,1,2进行循环);
2:用循环控制给每个数族元素进行赋值,需考虑一下几个问题:
(1) 定义变量k让其进行自增给数组元素赋值,并进行由外到内的循环 for(i=o;i<n/2;i++);
(2) 观察方阵的走势可知: 顺时针由外到内:
a 行标i=0,列标j 0-3; for(j=i;j<n-i-1;j++) a[i][j]=k++;
b列标j=4,行标i 0-3; for(j=i;j<n-i-1;j++) a[j][n-i-1]=k++;
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-1 for(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语句实现方阵的输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: