首页 > 解决方案 > 具有 N 列和 N 行的矩阵,列必须具有 N-1 , N-2 等值

问题描述

我在使用矩阵时遇到问题。要求是:

制作一个包含N列和N行的矩阵,第一列必须有值N,第二列必须有N-1,第三N-2列等等,直到最后一列必须有值 1。

例如: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对于每一行和每一列。我该如何解决这个问题?

#include <iostream>
using namespace std;

int main()
{

    int m[24][24], i, j, k = 0;
    int linia, coloana, piesa, lac=0;
    int mutari = 0;
    int ceva;
    cout << "Cate linii si cate coloane ? :";
    cin >> lac;
    ceva = lac;

    if (lac>1 && lac<25) {
        for (i = 0; i < lac; i++)
        {
            for (j = 0; j < lac; j++)
            {

                m[i][0] = lac;
                m[i][1] = ceva-1;
                ceva = ceva;

                m[i][j] = ceva - 1;
                ceva = ceva;

                if (i == j) {
                    m[i][j] = 2;
                    m[1][1] = 2;
                }
            };              
        };

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

    else cout << "Numarul de linii si coloane trebuie sa fie >=2 si <= 24" << endl;
    return 0;
}

标签: c++debuggingmatrix

解决方案


在 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]
}

推荐阅读