You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中打印二维数组次对角线及其上下方的元素?

嘿,我来帮你解决这个C++二维数组的打印问题!首先得明确次对角线的定义:对于n×n的方阵来说,次对角线就是满足行号 + 列号 = n - 1的元素(比如你给的3×3数组里,次对角线元素是3、5、7)。接下来咱们分别实现两种打印需求:

一、打印次对角线及其上方的元素

核心逻辑

次对角线的上方元素(包含次对角线本身)满足的条件是:行号 + 列号 ≤ n - 1。按照这个条件遍历数组,就能筛选出你要的元素;如果需要重复打印两次,只需要把遍历过程执行两遍即可。

代码实现(固定大小数组)

#include <iostream>
using namespace std;

int main() {
    // 示例3×3数组
    int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int n = 3; // 数组维度

    cout << "次对角线及其上方元素(重复两次):";
    // 第一遍遍历输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i + j <= n - 1) { // 筛选条件
                cout << arr[i][j] << " ";
            }
        }
    }
    // 第二遍遍历实现重复输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i + j <= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    cout << endl;

    return 0;
}

运行这段代码,输出就是你例子里的1 2 3 4 5 7 1 2 3 4 5 7(顺序和你描述的一致,任意顺序都符合要求)。

二、打印次对角线及其下方的元素

核心逻辑

次对角线的下方元素(包含次对角线本身)满足的条件是:行号 + 列号 ≥ n - 1。同样,重复打印两次只需要遍历两遍。

代码实现(固定大小数组)

在上面的主函数中添加以下代码即可:

cout << "次对角线及其下方元素(重复两次):";
    // 第一遍遍历输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i + j >= n - 1) { // 筛选条件
                cout << arr[i][j] << " ";
            }
        }
    }
    // 第二遍遍历实现重复输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i + j >= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    cout << endl;

运行后输出就是3 5 6 7 8 9 3 5 6 7 8 9,完全符合你的需求。

扩展:动态二维数组(vector实现)

如果你的数组是用vector创建的动态数组,逻辑完全一样,只是访问方式稍有不同:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<vector<int>> arr = {{1,2,3}, {4,5,6}, {7,8,9}};
    int n = arr.size();

    // 打印次对角线及其上方元素(重复两次)
    cout << "次对角线及其上方元素(重复两次):";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < arr[i].size(); j++) {
            if (i + j <= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < arr[i].size(); j++) {
            if (i + j <= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    cout << endl;

    // 打印次对角线及其下方元素(重复两次)
    cout << "次对角线及其下方元素(重复两次):";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < arr[i].size(); j++) {
            if (i + j >= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < arr[i].size(); j++) {
            if (i + j >= n - 1) {
                cout << arr[i][j] << " ";
            }
        }
    }
    cout << endl;

    return 0;
}

内容的提问来源于stack exchange,提问作者Sherlock Holmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:35:11