【问题标题】:Algorithm to fill 2D array in C在C中填充二维数组的算法
【发布时间】:2018-04-13 03:09:41
【问题描述】:

抱歉这个菜鸟问题。

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

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

我没有被告知矩阵是否一定是正方形的,但大小可能会有所不同。 所以基本上我看到的是矩阵是垂直、水平和对角对称的。 现在无论我尝试什么,它最终都变得超级复杂,而我看着它,我觉得它应该很简单......

你有什么技巧或sn-p你会怎么做? 提前致谢。

【问题讨论】:

  • 1) C 或 C++ 2) 作业?
  • C.有点家庭作业,是的
  • min(i,j,n-i,n-j)+1 !!!
  • 练习不清楚。是否必须在没有定义规则的情况下填写矩阵(根据“没有说规则是什么”),但矩阵看起来应该与您在 sn-p 中显示的完全一样?
  • 看起来这个数字是到边缘的最小距离。

标签: c arrays algorithm matrix


【解决方案1】:

您需要 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 2014-12-23
    • 2016-05-27
    • 2021-12-26
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多