螺旋数组
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
分析:这是一个一维维度和二维维度相等的数组arr[len][len],将num=1开始从arr[0][0]赋值,直到num=len*len结束赋值。在赋值过程中,如果遇到
下一个位置超出数组长度或者已经被赋值,则需要改变方向。
步骤解析:
1.首先定义一个二维数组,并将数组初始化为0(初始化为0方便后面判断有没有被赋值)
5 int len = 0;
6 printf("请输入数组长度:");
7 scanf("%d",&len);
8 int arr[len][len];
9 int i = 0;
10 int j = 0;
11 for(;i<len;i++){
12 for(j=0;j<len;j++){
13 arr[i][j] = 0;
14 }
2.对数组赋值
从arr[0][0]的位置开始赋值,那么该如何确定转弯的位置及方向呢?我们可以初始化一个dir = 0 用dir%4来确定赋值的方向
(0:向右,1:向下,2:向左,3:向上)。可以确定的是赋值是从arr[0][0]的位置开始向右运行,当右边的位置超出数组长度或者已经被赋值
(a[i][j]!=0)时,dir++,此时dir=1,dir%4=1,方向变为向下。
1 i = 0;
2 j = 0;
3 int dir = 0; //确定移动方向 dir%4 == 0向右 1向下 2向左 3向上
4 int num = 1