матрица перестановки строк C ++ - PullRequest
0 голосов
/ 19 октября 2018

привет У меня проблема с моей программой, я хочу поменять строки в матрице на следующую структуру:

первая и последняя строка.

вторая и вторая до последней строки.

до значений от N до N.

Примечание: я использовал #define n 4, но мне нужно иметь возможность сделать это для любого значения n.

Ввод:

3 4 5 0
2 6 1 2
2 7 1 2
2 1 1 2

Вывод:

2 1 1 2
2 7 1 2
2 6 1 2
3 4 5 0

Эта программа изменяет только первый и последний ряд:

#include <iostream>

using namespace std;

#define n 4 

void interchange(int m[][n])
{
    int rows = n;


    for (int i = 0; i < n; i++)
    {
        int t = m[0][i];
        m[0][i] = m[rows - 1][i];
        m[rows - 1][i] = t;
    }
}


int main()
{

    int m[n][n] = {
        { 8, 9, 7, 6 },
        { 4, 7, 6, 5 },
        { 3, 2, 1, 8 },
        { 9, 9, 7, 7 }
    };

    interchange(m);


    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << m[i][j] << " ";
        cout << endl;
    }
}

спасибо.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вам необходим цикл по строкам от 0 до n/2 (for (int i = 0; i < n/2; ++i)).И еще один цикл по элементам в каждой строке (for(int j = 0; j < n; j++))

Вам необходимо поменять каждый элемент из строки с индексом i на каждый элемент в строке с индексом n-i-1.

#include <iostream>
#define n 4

void interchange(int m[][n]) 
{ 
    for (int i = 0; i < n/2; ++i) 
    {
        for(int j = 0; j < n; j++)
        {
            std::swap(m[i][j], m[n-i-1][j]);
        }
    }
} 

int main()
{
    int m[n][n] = { { 8, 9, 7, 6 }, 
            { 4, 7, 6, 5 }, 
            { 3, 2, 1, 8 }, 
            { 9, 9, 7, 7 } }; 


    interchange(m);

    for (int i = 0; i < n; ++i) 
    {
        for(int j = 0; j < n; j++)
        {
            std::cout << m[i][j] << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}
0 голосов
/ 19 октября 2018

Вам нужно использовать дополнительный цикл для прохождения строк от первой до последней строки, например:

void interchange(int m[][n]) 
{ 
    int lastRow = n - 1; 

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