【发布时间】:2021-09-12 23:28:51
【问题描述】:
有一个矩阵,那我得做个函数才能知道左对角线和右对角线的值是一样的。
const int n = 100;
int main(){
int n;
char a[n][n];
int dimL = 0;
int dimR = 0;
cout << "Input the dimension of the matrix: ";
cin >> n;
for( int i = 0; i < n; i++ )
for( int j = 0; j < n; j++ ){
cin >> a[i][j];
}
cout << "Matrix A is: " << endl;
for( int i = 0; i < n; i++ )
for( int j = 0; j < n; j++ ){
cout << a[i][j] << " ";
if( j == n - 1 )
cout << endl;
}
check(a,n,dimL,dimR);
if(check(a,n,dimL,dimR)){
cout << "YES";
}
else {
cout << "NO";
}
}
主要是输入数组的简单代码。
bool check(char a[n][n], int n, int &dimL, int &dimR ){
char left[n][n], right[n][n];
for( int i = 0; i < n; i++ )
for( int j = 0; j < n; j++ ){
if( i == j ){
left[dimL++] = a[i][j]; // left diagonal
}
if( i + j == n - 1 ){
right[dimR++] = a[i][j]; // right diagonal
}
}
for( int i = 0; i < n; i++ )
if( left[i] != right[i] )
return false;
return true;
}
这就是函数。当然是不行的。它说表达式必须是可修改的左值。因为它的一维到二维。我可以将二维数组转换为一维数组吗?
我意识到有些代码是错误的。所以我改变了。
const int x = 100;
bool check(char a[x][x], int n, int &dimL, int &dimR ){
char left[x], right[x];
for( int i = 0; i < n; i++ )
for( int j = 0; j < n; j++ ){
if( i == j ){
left[dimL++] = a[i][j];
}
if( i + j == n - 1 ){
right[dimR++] = a[i][j];
}
}
for( int i = 0; i < n; i++ )
if( left[i] != right[i] )
return false;
return true;
}
它有效。我尝试输入数组 a a a, b b b, c c c,结果是yes。就是一个简单的小问题没解决,看不到左右数组。
如果我尝试将一些代码放在我的主目录中。
if(int i = 0; i < n; i++ ){
cout << left[i];
}
这同样表明我需要可修改左值的表达式..
谢谢
【问题讨论】:
-
这能回答你的问题吗? C++ 2D array to 1D array
-
不应该
char left[n][n], right[n][n];是char left[n], right[n];,因为你希望它们是一维的吗? -
我试过了。它没有用。对我有什么建议吗?
-
谢谢帕特里克。但还是不行
-
在这种情况下,例如我的矩阵是:a b c d e f c b a 左对角线是aea,右对角线是cec。我试图为左对角线创建一个数组作为 left[n]。所以左[0] = a,左[1] = e,左[2] = a,依此类推..