c++ - 具有 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;
}
解决方案
在 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]
}