用C填充二维数组的算法

时间:2017-10-31 20:29:33

标签: c arrays algorithm matrix

抱歉这个noob问题。

所以我被要求创建一个算法来填充2D数组。他们没有说明规则是什么,但是,我被告知生成的矩阵应该是这样的:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

我没有被告知矩阵是否必须是正方形,但尺寸可能会有所不同。 所以我所看到的基本上是矩阵,水平和对角线对称。 现在无论我尝试什么,它最终都会变得非常复杂,而在我看来它时,我觉得它应该很简单......

关于你如何做的任何技巧或片段? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您需要2个嵌套循环来遍历行和列。字段的内容是控制变量的最小值,也是控制变量与数组维度大小差异的最小值,增加1。

N = 5

0: min(0, N-0-1) + 1 = 1
1: min(1, N-1-1) + 1 = 2
2: min(2, N-2-1) + 1 = 3
3: min(3, N-3-1) + 1 = 2
4: min(4, N-4-1) + 1 = 1

#include <stdio.h>

#define N 5

#define MIN(a,b) (((a)<(b))?(a):(b))

int main()
{
    int a[N][N];
    for ( int i = 0; i < N; ++ i )
    {
        for ( int j = 0; j < N; ++ j)
        {
            int minI = MIN(i, N-i-1);
            int minJ = MIN(j, N-j-1);
            a[i][j] = MIN(minI, minJ) + 1; 
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出:

1 1 1 1 1 
1 2 2 2 1 
1 2 3 2 1 
1 2 2 2 1 
1 1 1 1 1

请参阅live example