我必须创建一个程序,允许用户填写订单4的(部分)拉丁方。您可以使用0来表示空单元格。用户将给出要放置的数字,行和列。只有在不违反部分拉丁方的属性且不应重写已放置的数字时,才应放置该数字。
我有一个矩阵,现在输出全零。接下来我必须用用户输入的内容替换每个值。问题是我不知道该怎么做。
这是我的代码:
#include <iostream>
using namespace std;
const int ORDER = 4;
void fill (int m[], int order);
void outputMatrix (int m[], int order);
void replaceValue (int m[], int order, int n, int row, int column);
int main(){
int matrix[ORDER];
int row;
int column;
int n;
fill (matrix, ORDER);
outputMatrix (matrix, ORDER);
do {
cout << "Enter the number to place, the row and the column, each seperated by a space: ";
cin >> n;
cin >> row;
cin >> column;
}while (n > 0 || n <= ORDER);
if (n <= 0 || n >= ORDER){
cout << "Thank you";
cout << endl;
}
return 0;
}
void fill (int m[], int order){
for (int i = 0; i < order*order; i++){
m[i] = 0;
}
}
void outputMatrix (int m[], int order){
int c = 0;
for (int i = 0; i < order*order; i++){
c++;
cout << m[i] << ' ';
if (c == order){
cout << endl;
c = 0;
}
}
cout << endl;
}
void replaceValue (int m[], int order, int n, int row, int column){
for (int i = 0; i < order; i++){
m[order] = m[row][column];
m[row][column] = n;
}
}
如何在C ++中替换Matrix中的值?
答案 0 :(得分:1)
如果你有一个矩阵,矩阵[row] [col] =值;会做的伎俩。但是,我看到你分配了一个数组。一定要看看这个。
编辑:
我仔细看了你的代码,你做错了。
第一: 矩阵[订购] 将创建一个ORDER值的单个数组。如果你想和ORDER按ORDER矩阵试试: 矩阵[订购] [订购]
第二: 你在打电话:
void fill (int m[], int order){
for (int i = 0; i < order*order; i++){
m[i] = 0;
}
}
大小为4且order == 4.这将在数组外循环并给你带来问题。
尝试类似:
matrix[ORDER][ORDER];
for (int row = 0; row != ORDER; ++row)
{
for (int col = 0; col != ORDER; ++col)
{
matrix[row][col] = 0;
}
}
希望这有帮助。
答案 1 :(得分:0)
如果将arr[i][j]
定义为arr
,则无法真正写arr[]
。没有关于行长度的信息(有多少列)。
您可以使用arr[][4]
类型的数组,并按如下方式编写函数:
// The & is to pass by reference.
void print(int (&arr)[][4], int length)
{
for(int i = 0; i < length; i++) {
for(int j = 0; j < 4; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
但在我看来,对于像这样的低阶多维数组,使用typedef作为向量矢量是更好的选择:
typedef vector<vector<int> > Matrix;
void print(Matrix& arr)
{
for(int i = 0; i < arr.size(); i++) {
for(int j = 0; j < arr[i].size(); j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
在任何一种情况下,写arr[i][j] = k
都会表现得像你期望的那样。
答案 2 :(得分:0)
清除/清零矩阵的最简单方法是:
memset( &matrix, 0, sizeof(matrix));
- )