【问题标题】:Swapping elements in 2d array交换二维数组中的元素
【发布时间】:2020-02-23 21:12:57
【问题描述】:

所以,我正在尝试相对于主对角线交换矩阵元素。我尝试过使用 temp 方法(使用 temp 变量时切换值),也尝试过 std::swap(a,b)。不知何故,它只交换了矩阵的右上角,而另一半没有改变。

如何让所有东西交换?

我的代码:

#include <iostream>

using namespace std;

int main()
{
    const int n = 7;
    srand (time(NULL));

    int matrix[n][n];

    cout << "Original Matrix :" << endl;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            (i == j) ?  matrix[i][j] = 0 : matrix[i][j] = rand() % 100+1;
            cout << matrix[i][j] << "\t";
        }
        cout << endl;
    }   

    cout << "\nRemade Matrix:" << endl;

    for (int i = 0; i < n; i++)
    {   

        for (int j = 0; j < n; j++)
        {
            int temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;


//          swap(matrix[i][j], matrix[j][i]);      //another method

            cout << matrix[i][j] << "\t";
        }
        cout << endl;
    }
    return 0;
}

【问题讨论】:

    标签: c++ matrix


    【解决方案1】:

    你基本上是交换它们两次,用这个替换你的交换循环。注意第二个循环的条件,它是j &lt; i。然后,您可以使用另一组循环打印它。

    for (int i = 0; i < n; i++)
        for (int j = 0; j < i ; j++)
            swap(matrix[i][j], matrix[j][i]);
    

    【讨论】:

      【解决方案2】:

      你的逻辑几乎没问题。只是内部循环计数器将从“i + 1”开始,否则在交换值再次重叠之后。尝试以下代码并确保您理解它。编码愉快!

      for (int i = 0; i < n; i++)
      {   
      
          for (int j = i + 1; j < n; j++)
          {
              int temp = matrix[i][j];
              matrix[i][j] = matrix[j][i];
              matrix[j][i] = temp;
          }
      
      }
      
      for (int i = 0; i < n; i++)
      {   
          for (int j = 0; j < n; j++)
          {
              cout << matrix[i][j] << "\t";
          }
          cout << endl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多