用嵌套循环代码解释二维数组的输出
Explain the output of 2D array with nested loop code
#include <stdio.h>
int main()
{
int i, j, k, px[] = { -2, -2, -1, -1, 1, 1, 2, 2 },
py[] = { -1, 1, -2, 2, -2, 2, -1, 1 };
int cox[4][4] = { { 0 } };
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 8; k++)
if (((i + px[k]) >= 0 && (i + px[k]) < 4) &&
((j + py[k]) >= 0 && (j + py[k]) < 4))
cox[i][j]++;
printf("%d\t", cox[i][j]);
}
printf("\n\n");
}
}
我部分理解这个嵌套循环。但我不能完全理解为什么它的某些部分的输出是 3 为什么中间部分是 4 但我明白为什么这个 2d 数组的角部分的输出是 2.please 解释一下。
由于结果矩阵是象限对称的,让我开始检查
四种情况:(i=0, j=0), (i=0, j=1), (j=1, i=0) and (i=1, j=1).
- 如果(i=0,j=0),条件
(i + px[k]) >= 0 && (i + px[k]) < 4) && ((j + py[k]) >= 0 && (j + py[k]) < 4)
满足两次:当k=5和k=7时。
- 如果(i=0,j=1),条件满足3次:当k=5,k=6,k=7.
- 如果(i=1,j=0),条件满足3次:当k=3,k=5,k=7.
- 如果(i=1,j=1),条件满足四次:当k=3,k=5,k=6,k=7.
你可以将类似的考虑扩展到四个象限,那么你就可以
获取输出。
#include <stdio.h>
int main()
{
int i, j, k, px[] = { -2, -2, -1, -1, 1, 1, 2, 2 },
py[] = { -1, 1, -2, 2, -2, 2, -1, 1 };
int cox[4][4] = { { 0 } };
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 8; k++)
if (((i + px[k]) >= 0 && (i + px[k]) < 4) &&
((j + py[k]) >= 0 && (j + py[k]) < 4))
cox[i][j]++;
printf("%d\t", cox[i][j]);
}
printf("\n\n");
}
}
我部分理解这个嵌套循环。但我不能完全理解为什么它的某些部分的输出是 3 为什么中间部分是 4 但我明白为什么这个 2d 数组的角部分的输出是 2.please 解释一下。
由于结果矩阵是象限对称的,让我开始检查 四种情况:(i=0, j=0), (i=0, j=1), (j=1, i=0) and (i=1, j=1).
- 如果(i=0,j=0),条件
(i + px[k]) >= 0 && (i + px[k]) < 4) && ((j + py[k]) >= 0 && (j + py[k]) < 4)
满足两次:当k=5和k=7时。 - 如果(i=0,j=1),条件满足3次:当k=5,k=6,k=7.
- 如果(i=1,j=0),条件满足3次:当k=3,k=5,k=7.
- 如果(i=1,j=1),条件满足四次:当k=3,k=5,k=6,k=7.
你可以将类似的考虑扩展到四个象限,那么你就可以 获取输出。