以螺旋方式在C中填充数组

时间:2015-06-06 20:01:56

标签: c arrays spiral

好吧,我必须做一个以这种螺旋方式填充阵列的程序

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] 

依此类推,但是我无法想出一个适合循环使用来帮助我填写它,所以我不得不请你们帮忙

2 个答案:

答案 0 :(得分: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. 维度修复后,第二个循环将有助于进入下一列。 (内增量循环)
  4.   
  5. 第三个循环将需要返回第一行。 (内部递减循环)
  6.   

For First Interation:   我们正在存储1 * 1维度的数组。这里内部递减循环不起作用

For Second Interation:   loop1变为 1 ,因此第二列将填充下一个值,直到达到第二行。    这里第二个内循环将出现在图片中。此循环将开始存储当前行的值并递减loop2值。一旦达到零,它就会破裂。

所以我们首先使用递增循环存储列,然后使用递减循环来存储行。相同将继续,直到外循环达到循环中的维度。这里它将作为矩阵的维度达到 4

答案 1 :(得分:-2)

你只是做反向L。所以你需要做一个列然后一行。 见代码

`

pf = 2*stdtr(dof, -np.abs(tf))
pval = 2*stats.t.sf(np.abs(tf), dof-1)

`