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

用C语言实现顺时针螺旋方阵的打印及

#include<stdio.h>
#define N 20
main()
{
int a[N][N];
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可取值012进行循环);

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语句实现方阵的输出

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值