你好,我的程序有问题,我想用下一种结构交换矩阵中的行:
第一行和最后一行。
第二排,倒数第二排。
直到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;
}
}
谢谢。
答案 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)
您需要从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;
}