我需要更改主程序,因为我希望用户输入该怎么做?

时间:2019-12-30 21:10:17

标签: c++ c++11

#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)检查转置矩阵和给定矩阵是否相同

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更好的一种选择。

  1. 您可以做的是首先询问用户矩阵将有多少行和多少列。
  2. 此后,您将使用这些参数创建一个动态2d数组。
  3. 然后,您将开始接受用户输入,直到您填写矩阵。
  4. 处理完矩阵后,需要释放内存

它看起来像这样:

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;

我希望这会有所帮助。