Перестановка элементов в 2d массиве - PullRequest
0 голосов
/ 23 февраля 2020

Итак, я пытаюсь поменять местами матричные элементы относительно главной диагонали. Я попытался с помощью временного метода (переключение значений при использовании временной переменной), также попытался std::swap(a,b). Каким-то образом он только меняет верхнюю правую сторону матрицы и оставляет другую половину неизменной.

enter image description here

Как мне сделать все поменять местами?

Мой код:

#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;
}

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Ваш лог c почти в порядке. Просто внутренний счетчик l oop будет начинаться с "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;
}
3 голосов
/ 23 февраля 2020

Вы в основном меняете их местами дважды, замените их местами обмена. Обратите внимание на состояние второго l oop, это j < i. Затем вы можете распечатать его с другим набором петель.

for (int i = 0; i < n; i++)
    for (int j = 0; j < i ; j++)
        swap(matrix[i][j], matrix[j][i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...