gpt4 book ai didi

C++:以对角线方式处理二维数组元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:08 26 4
gpt4 key购买 nike

假设我们有一个二维数组,arr[N][N],其中N 是一个常量整数。假设 arr 的每个元素都已初始化。

如何使用嵌套的 for 循环打印 arr 反对角线的元素?

我的意思是:

  • 最外层循环的第一次迭代后,arr[0][0] 将被打印
  • 在最外层循环的第二次迭代后,arr[0][1]arr[1][0] 将被打印
  • 在最外层循环的第三次迭代之后,arr[0][2]arr[1][1]arr[2 ][0] 将被打印
  • ...
  • 在最外层循环的最后一次迭代之后,将打印 arr[N-1][N-1]

感谢您的宝贵时间!

最佳答案

对所有写下“下半场应该相似”的人感到抱歉……不是。

无论如何,给你:

// traverse array diagonally
int c, tmp, x;
for (c = N - 1; c > -N; c--) {
tmp = N - abs(c) - 1;
x = tmp;
while (x >= 0) {
if (c >= 0) {
std::cout << arr[x][tmp - x] << ", ";
}
else {
std::cout << arr[N - (tmp - x) - 1][(N-1)-x] << ", ";
}
--x;
}
std::cout << "\n";
}

你需要这个来玩游戏吗?

[edit] 再看一遍,我觉得我的回答写得不是很好。这是一个快速浏览:

假设 N 是 3。

我们需要的是对坐标组合的迭代,如下所示:

(0, 0)
(1, 0), (0, 1)
(2, 0), (1, 1), (0, 2)
(2, 1), (1, 2)
(2, 2)

首先是一些占位符:

int c,    // a counter, set by the outer loop
tmp, // for intermediate results
x; // the x-index into *arr* (*y* will be defined implicitly)

现在这个外循环

for (c = N - 1; c > -N; c--) { 

使 c 迭代 {2, 1, 0, -1, 2}

下一步

    tmp = N - abs(c) - 1;
x = tmp;

{2, 1, 0, -1, -2} 变成 {0, 1, 2, 1, 0},这是此步骤所需的输出减一(因此它们可以用作索引)。我们制作了两个拷贝,tmpx

现在我们从 x 倒数到 0:

    while (x >= 0) {
...
--x;
}

如果我们在 arr 的左上半部分,用 c >= 0 表示,arr 的 x 索引需要从对角线开始并下降到零 (0 to 0, 1 to 0 and 2 to 0) ,而 y 索引需要从零开始并上升到对角线 (0 到 0、0 到 1 和 0 到 2):

        if (c >= 0) {
std::cout << arr[x][tmp - x] << ", ";
}

一旦我们位于右下半部分,x 索引需要从 N 开始并向下到对角线 (2 到 1 和 2 到 2),而 y 索引需要从对角线开始并上升到 N(1 到 2 和 2 到 2):

        else {
std::cout << arr[N - (tmp - x) - 1][(N-1)-x] << ", ";
}

最后我们只需要在每一行的末尾换行:

    std::cout << "\n";

萨维? :-)

关于C++:以对角线方式处理二维数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6150382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com