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