1

好的,我必须做一个像这样以螺旋方式填充数组的程序

1  2  5  10 
4  3  6  11 
9  8  7  12 
16 15 14 13 

它不像从中心开始的正常螺旋,所以我遇到了一些麻烦。存储数据的位置应该是

array[0] [0] 
array[0] [1] 
array[1] [1] 
array[1] [0] 


array[0] [2] 
array[1] [2] 
array[2] [2]
array[2] [1] 
array[2] [0] 

array[0] [3] 
array[1] [3] 
array[2] [3]
array[3] [3] 
array[3] [2] 
array[3] [1]
array[3] [0] 

等等,但我想不出一个合适的循环来帮助我填充它,所以我不得不向你们寻求帮助

4

2 回答 2

0

嗨,我希望以下代码对您有用。我保留printf声明以显示它是否存储正确的值。

#include<stdio.h>
#define MAT_DIM 4

int main()
{
    int loop1,loop2;
    int number = 0;
    int array[MAT_DIM][MAT_DIM];    
    for(loop1 = 0; loop1 < MAT_DIM; loop1++)
    {
        for(loop2 = 0; loop2 <= loop1; loop2++) 
        {
            array[loop2][loop1] = ++number;                 
            printf("%d  %d  %d \n", loop2, loop1, array[loop2][loop1]); 
        }


        for(loop2 = loop1-1; loop2 >= 0; loop2--) 
        {
            array[loop1][loop2] = ++number;
            printf("%d  %d  %d \n", loop1, loop2, array[loop1][loop2]);
        }
    }           
    return 0;
}

编辑

代码如下:我们需要三个loops

  1. 增加矩阵的维数(外增量循环)
  2. 一旦尺寸固定,第二个循环将有助于进入下一列。(内部增量循环)
  3. 需要第三个循环才能回到第一行。(内部递减循环)

对于第一次交互:我们正在存储 1*1 维度的数组。这里内部递减循环不起作用

对于第二次交互: loop1变为1,因此第二列将填充下一个值,直到到达第二行。这里将出现第二个内循环。此循环将从当前行开始存储值并递减该loop2值。一旦它达到零,它就会破裂。

因此,我们首先使用递增循环存储列,然后使用递减循环存储行。同样将继续,直到外循环达到循环中的尺寸。在这里它将上升到4作为矩阵的维度。

于 2015-06-06T21:36:31.707 回答
-2

你只是在做一个反向 L 。所以你需要先做一列然后再做一行。查看代码

`

int k=1;
//n= no of rows/cols
array[0][0]=1;
for(i=0;i<n;i++)
{
    for(j=0;j<=i;j++) //column
    array[j][i]=k++;

    for(j=i-1;j>=0;j--)  //row
    array[i][j]=k++;
}

`

于 2015-06-06T20:32:15.993 回答