螺旋数组
专业:09通信工程班级:2班姓名:王忠怀学号:20090210420221
所谓螺旋数组,就是指向像
1363534333231302928
这样的数组.
这是一个10阶的螺旋数组。那么如何使用c语言来实现这样的螺旋数组的输出呢?
23763626160595827
3386584838281805726
4396685969594795625
5041676886879198100999392787755542423
7
42698091765322
8437071727374755221
94445474849505120
10111213141516171819
分析方法如下:
一.算法分析:
以3阶为例:
1234765
转化成数组就是:
a00a01a02a10a11a12a20a21a22
看一下规律:
1.a00a01a02→2.a12a22↓3.a21a20←4.a10↑5.a11→
第1步是(→)写的,就是一个循环写完
第2步是(↓)写的,列号(2)是跟第1步的最后一个数a02的列号相同第3步是(←)写的,行号(2)是跟第2步的最后一个数a22的行号相同第4步是(↑)写的,列号(0)是跟第3步的最后一个数a20的列号相同到此一个大循环结束。
从第5步开始,就重复以上循环
二.算法设计:
对于1、2阶的矩阵,大循环1次对于3、4阶的矩阵,大循环2次……
所以n、n+1阶矩阵,大循环的次数应该是(n+1)/2也可以这样理解:
第1个子循环:就像普通的循环就可以了
第2个子循环:记下最后的列号,行号依次加1第3个子循环,记下最后的行号,列号依次减1第4个子循环,记下最的的列号,行号依次减1
三.程序实现
程序代码为:
#include//宏定义,定义螺旋矩阵的阶数,要想改变数组的阶数,只需在改变N的值即可
#defineNmain(){
intn,i,j,m=1;
inta[N][N]={0};//定义螺旋数组,并初始化//螺旋数组的实现
for(n=0;n<=N/2;n++){
for(j=n;ja[n][j]=m++;for(i=n+1;ia[i][N-n-1]=m++;for(j=N-n-2;j>=n;j--)}
}
//输出螺旋数组for(i=0;ifor(j=0;jprintf(\"%4d\printf(\"\\n\");}
a[N-n-1][j]=m++;for(i=N-n-2;i>n;i--)
a[i][n]=m++;
运行的结果为: