交换行矩阵C ++

时间:2018-10-19 07:02:40

标签: c++ matrix rows

你好,我的程序有问题,我想用下一种结构交换矩阵中的行:

第一行和最后一行。

第二排,倒数第二排。

直到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 :(得分:1)

您需要使用额外的循环来遍历第一行到最后一行,如下所示:

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

答案 1 :(得分:1)

您需要从0n/2for (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;
}