c - 以螺旋方式填充C中的数组

标签 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] 

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

最佳答案

您好,我希望以下代码对您有用。我保留了 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;
}

编辑

代码如下: 我们需要三个循环

  1. To increase the dimension of matrix (Outer incremental loop)
  2. Once dimension is fixed, Second loop will help to go upto next column. (Inner Incremental Loop)
  3. 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/

相关文章:

android - 登录Android NDK代码的任何简单方法?

c - 如何将包含通配符的路径转换为 ​​C 程序中相应的文件条目?

c - 为什么这允许从 (char *) 提升到 (const char *)?

c - 在内存中有数据库 - C

java - 使用 indexOf 时类似于 equalsIgnoreCase

c# - 内螺旋算法不起作用

ruby - 在 Ruby 中匹配来自多个数组的相应对象索引值

c++ - vector <int> a 、 vector <int> a[n] 和 vector <int> a(n) 之间有什么区别?

javascript - 在服务器端实现 Paper.js 螺旋光栅示例

Java 二维数组螺旋/顺时针遍历