具有N列和N行的矩阵,列必须具有N-1,N-2等值

时间:2018-11-02 20:52:12

标签: c++ debugging matrix

我遇到矩阵问题。要求是:

制作一个具有N列和N行的矩阵,第一列必须具有值N,第二列必须具有N-1,第三列{{1 }},直到最后一列的值必须为1。

例如:N-2必须是:

N[7][7]

我的代码仅对每一行和每一列获取:7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 。我该怎么解决?

7 6 6 6 6 6 6

3 个答案:

答案 0 :(得分:0)

以下代码应整洁地初始化矩阵。

if (lac>1 && lac<25) {
    for (i = 0; i < lac; i++)
    {
        ceva = lac;
        for (j = 0; j < lac; j++)
        {
            m[i][j] = ceva;
            ceva = ceva-1;
        }
    } // no need for ';' here

    for (i = 0; i < lac; i++)
    {
        for (j = 0; j < lac; j++)
        {
            cout << m[i][j] << " ";
        }
        cout << endl;
    }
}

在每一行的开头,我们使用ceva = lac;重置将进入矩阵的值。 设置该值后,我们立即将ceva减小1。 我剥离了很多我不明白目的的代码。

答案 1 :(得分:0)

Tim Randall向您展示了如何修复代码之后,这就是C ++的处理方式:

#include <cstddef>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
    std::cout << "Rows: ";
    std::size_t rows;
    std::cin >> rows;
    std::cout << "Columns: ";
    std::size_t cols;
    std::cin >> cols;

    std::size_t elements{ rows * cols };
    std::vector<int> m(elements);
    std::generate(m.begin(), m.end(), [&]() { return --elements % cols + 1; });

    for (std::size_t y{}; y < rows; ++y, std::cout.put('\n'))
        std::copy(m.begin() + y * cols, m.begin() + (y + 1) * cols,
                  std::ostream_iterator<int>(std::cout, " "));

    // access m[y][x] with m[y * cols + x]
}

答案 2 :(得分:0)

使自己更轻松,并利用标准库的功能。

constexpr auto N = 7;
std::array<int, N> row{};
std::array<std::array<int, N>, N> matrix{};

std::iota(std::rbegin(row), std::rend(row), 1);
std::fill(std::begin(matrix), std::end(matrix), row);

std::array只是围绕c样式数组的非常薄的包装,使用起来稍微好一点,并且具有记住大小的好功能。
std::iota填充一个范围,该范围具有顺序增大的值(在这种情况下,从1开始)。通过使用std::rbegin,我们告诉它以相反的方式填充row
最后,我们使用std::fillmatrix的每一行设置为row

通过将std::rbegin替换为.rbegin(),该代码甚至可以在c ++ 11上运行。