抱歉这个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
我没有被告知矩阵是否必须是正方形,但尺寸可能会有所不同。 所以我所看到的基本上是矩阵,水平和对角线对称。 现在无论我尝试什么,它最终都会变得非常复杂,而在我看来它时,我觉得它应该很简单......
关于你如何做的任何技巧或片段? 提前谢谢。
答案 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