繁体   English   中英

交换二维数组中的元素

[英]Swapping elements in 2d array

所以,我试图根据主对角线交换矩阵元素。 我尝试过使用临时方法(在使用临时变量时切换值),也尝试过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;
}

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

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

你的逻辑几乎没问题。 只有内循环计数器将从“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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM