#include <iostream>
using namespace std;
const int MAX = 100;
// Fills transpose of mat[N][N] in tr[N][N]
void transpose(int mat[][MAX], int tr[][MAX], int N)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
tr[i][j] = mat[j][i];
}
// Returns true if mat[N][N] is symmetric, else false
bool isSymmetric(int mat[][MAX], int N)
{
int tr[N][MAX];
transpose(mat, tr, N);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (mat[i][j] != tr[i][j])
return false;
return true;
}
// Driver code
int main()
{
int mat[][MAX] = { { 1, 3, 5 },
{ 3, 2, 4 },
{ 5, 4, 1 } };
if (isSymmetric(mat, 3))
cout << "Yes";
else
cout << "No";
return 0;
}
代码是要找出矩阵是否对称,但是我很困惑如何从用户而不是代码中读取输入。我做了一个简单的解决方案,基本上我已经创建了给定矩阵的转置,然后检查了转置和给定矩阵是否相同。 1)创建给定矩阵的转置。 2)检查转置矩阵和给定矩阵是否相同
答案 0 :(得分:3)
您无需像在注释中一样替换mat
变量,只需用用户而不是您提供的值填充它即可。
我假设您知道如何使用cin
。
您可以先将矩阵初始化为空,如下所示:
int mat[][MAX] = { { 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 } };
这个想法是,您每次使用cin每次将其收集到一个变量中时,都使用cin从用户输入该值。然后,将值存储在矩阵的右单元格中。
总体来说是这样的:
cin >> myVariable
mat[0][0] = myVariable;
cin >> myVariable
mat[0][1] = myVariable
<similar code>
cin >> myVariable
mat[1][0] = myVariable
<more similar code>
cin >> myVariable
mat[2][2] = myVariable
答案 1 :(得分:-2)
您可以通过两种方式解决此问题:
非动态解决方案
const int COL = 3;
const int ROW = 3;
// created a 2d 3x3 matrix all initialized to 0
int mat[ROW][COL]{0};
// goes through each row
for(int i = 0; i < ROW; ++i)
{
// goes through each column
for(int j = 0; j < COL; ++j)
{
cin >> mat[i][j];
}
}
我希望这会有所帮助。
动态内存解决方案
使用vector
是更好的一种选择。
它看起来像这样:
cin >> rows;
cin >> cols;
int** arr = new int*[rows];
for(int i = 0; i < rows; ++i)
{
arr[i] = new int[cols];
// here we will ask the user for the first row of number
for(int j = 0; j < cols; ++j)
{
cin >> arr[i][j];
}
}
使用矩阵完成操作后释放内存:
for(int i = 0; i < rows; ++i)
{
delete[] arr[i];
}
delete[] arr;
我希望这会有所帮助。