你好,我的程序有问题,我想用下一个结构交换矩阵中的行:
第一排和最后一排。
第二排和第二排。
直到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;
}
}谢谢。
发布于 2018-10-19 07:16:32
您需要一个从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;
}发布于 2018-10-19 07:13:11
您需要使用其他循环来遍历从第一行到最后一行的行,如下所示:
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;
}
}
}https://stackoverflow.com/questions/52887303
复制相似问题