题解
矩阵交换行
1 条题解
-
0
解题思路
用二维数组 a[5][5] 存下整个 5×5 的矩阵。
然后读入两个行号 m 和 n(注意行号是从 1 开始的),要把第 m 行和第 n 行整行互换。
交换两行,需要一个“临时工”帮忙,就像把两个盒子里的东西对调,要先拿一个空盒子:
- 先把第 m 行的 5 个数全部搬到临时数组 t 里;
- 再把第 n 行的 5 个数搬到第 m 行;
- 最后把临时数组 t 里的数搬回第 n 行。
因为数组下标从 0 开始,而行号从 1 开始,所以访问第 m 行时要写成 a[m-1]。
参考代码
// P4446 矩阵交换行:把 5x5 矩阵的第 m 行和第 n 行互换 #include <iostream> using namespace std; int main() { int a[5][5]; // 读入 5 行、每行 5 个数 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) cin >> a[i][j]; } int m, n; cin >> m >> n; // 要交换的两行编号(从 1 开始) // 借助临时数组 t 把第 m 行和第 n 行的数据互换 int t[5]; for (int j = 0; j < 5; j++) t[j] = a[m - 1][j]; // 先把第 m 行存到 t for (int j = 0; j < 5; j++) a[m - 1][j] = a[n - 1][j]; // 第 n 行放到第 m 行 for (int j = 0; j < 5; j++) a[n - 1][j] = t[j]; // t 里的原第 m 行放到第 n 行 // 输出交换后的矩阵 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j > 0) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }复杂度分析
矩阵固定是 5×5。
- 时间:读入 25 个数、交换 5 个数、输出 25 个数,都是常数次操作,时间复杂度是 O(1)。
- 空间:一个 5×5 的数组加一个长度为 5 的临时数组,空间复杂度是 O(1)。
- 1