如何在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
相关产品推荐
相关产品推荐

