【题目链接】
ybt 1126:矩阵转置
OpenJudge NOI 1.8 10:矩阵转置
【题目考点】
1. 二维数组遍历
【题解代码】
解法1:构建新矩阵
矩阵转置后,原来i,j位置的元素会变到j,i位置
#include<bits/stdc++.h>
using namespace std;
#define N 105
int main()
{
int m, n, a[N][N], r[N][N];
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
r[j][i] = a[i][j];
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j <= n; ++j)
cout << r[i][j] << ' ';
cout << endl;
}
return 0;
}
解法2:遍历原矩阵输出
转置后的行从小到大是原矩阵列从小到大,外层循环为j从1到n。
转置后的列从小到大是原矩阵行从小到大,内层循环为i从1到n。
#include<bits/stdc++.h>
using namespace std;
#define N 105
int main()
{
int m, n, a[N][N], r[N][N];
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
for(int j = 1; j <= m; ++j)
{
for(int i = 1; i <= n; ++i)
cout << a[i][j] << ' ';
cout << endl;
}
return 0;
}