好吧,我必须做一个像这样以螺旋方式填充数组的程序
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]
等等,但是我想不出一个合适的循环来帮助我填充它,所以我不得不向你们寻求帮助
最佳答案
您好,我希望以下代码对您有用。我保留了 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;
}
编辑
代码如下:
我们需要三个循环
- To increase the dimension of matrix (Outer incremental loop)
- Once dimension is fixed, Second loop will help to go upto next column. (Inner Incremental Loop)
- Third loop will be required to come back to first row. (Inner decremental loop)
对于第一次交互: 我们正在存储 1*1 维的数组。这里内部递减循环将不起作用
对于第二次交互:
loop1
变为 1 因此第二列将填充下一个值,直到到达第二行。
这里将出现第二个内部循环。此循环将从当前行开始存储值并递减 loop2
值。一旦达到零,它就会破裂。
所以我们先用递增循环存储列,然后用递减循环存储行。同样将继续,直到外循环到达循环中的维度。这里它将上升到 4 作为矩阵的维度。
关于c - 以螺旋方式填充C中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687034/