如何访问二维数组的外边框元素?

时间:2015-03-29 02:21:17

标签: c arrays algorithm

假设一个数组x [3] [3],其元素为

1 2 3
4 5 6
7 8 9

如何访问x的外边界元素1,2,3,6,9,8,7,4,1?我能够为这个问题提出一些模式,但很难将它转换成循环。我们需要保持行不变并增加列号。然后列号。不断增加排号。然后我们需要保持行没有。常数和减少列号。到0,最后保持列号。常数减少行号。回到0。

2 个答案:

答案 0 :(得分:1)

你可以通过保持一对"坐标"来解决这个问题。行的变量r和列的c以及一对" delta"变量dr用于更改下一步的行,dc用于更改下一步的列。

以下是dr和`dc:

的有效组合
dr dc direction
-- -- ---------
 0  1 Right
 1  0 Down
 0 -1 Left
-1  0 Up

从零开始dr,在dc开始1以及#34;向右移动"。在循环的每次迭代中,您将dr添加到r,将dc添加到c。之后,检查是否需要转动"右。

向右转的技巧在以下三行代码中:

int tmp = dr;
dr = dc;
dc = -tmp;

要确保它有效,请尝试以上四种组合。您会看到它会更改序列中的(dr, dc)对,从右到左 - 右 - 依次......等等。

每次到达角落时都执行此代码以完成程序。

答案 1 :(得分:0)

我尝试实现dasblinkenlight建议并使其工作。这是代码。

printf("\nOuter border of the array: ");

int dr = 0;
int dc = 1;
int r = 0;
int c = 0;
int count = 0;


for (int i = 0; i < 9; i++){

    printf("%d ", x[r][c]);

    if (count == 2){

        int tmp = dr;
        dr = dc;
        dc = -tmp;
        count = 1;
    }
    else{
        count++;
    }

    r = r + dr;
    c = c + dc;
}

}