我想打印一个矩阵的右半球如果我们在一个矩阵中画主对角线和次对角线,我们看到我们得到了4个相等的部分,在我的算法教科书中,右边的部分称为一个正方形矩阵的右半球。
例如,在下面的5 x 5矩阵中,右半球由元素组成:-1, -3, -2, 0
我试图解决这个问题的方法是,开始并组成第二个对角线的一半,然后在左对角线的元素右侧打印每个元素当我到达第二个对角线的中间时,我在主对角线的下部重复这个过程。
类似的事情(至少,这是我在脑海中看到的):
这是一些打印5 x 5矩阵右半球的工作代码。它可以工作,但它很难看,而且对于行数和列数为偶数的矩阵(例如a4 x 4矩阵)也不能正常工作。

#include <iostream>

#define N 5
#define M 5

void printHemisphere(int matrix[N][M], int n, int m)
{
    int i = 1;
    for(int j = n - 1; j > n / 2; i++, j--)
    {
        for (int k = j + 1; k < m; ++k)
        {
            std::cout << matrix[i][k] << " ";
        }
        std::cout << std::endl;
    }

    for(int j = n / 2; j < n; i++, j++)
    {
        for (int k = j + 1; k < m; ++k)
        {
            std::cout << matrix[i][k] << " ";
        }
        std::cout << std::endl;
    }

}

int main(int argc, char const *argv[])
{
     int matrix5[N][M] =
     {
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15},
        {16, 17, 18, 19, 20},
        {21, 22, 23, 24, 25}
     };


    printHemisphere(matrix5, N, M);

    return 0;
}

你将如何处理这个问题?

最佳答案

我认为这应该适用于方阵:

void printHemisphere(int matrix[N][M], int n, int m)
{
    int mid = n / 2;
    for(int i = 1; i < mid; i++)
    {
        for (int j = n - i; j < m; ++j)
        {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    for(int i = mid; i < n - 1; i++)
    {
        for (int j = i + 1; j < m; ++j)
        {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

外部循环跳过第一行和最后一行,因为它们不能输出任何内容。

关于c++ - 如何打印方阵的右半球,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30876844/

10-09 06:34