用C++iostream编写将二维数组的各列按其所有元素的和从大到小进行排列,每一列元素的相对位置保持不变。
时间: 2024-02-15 20:03:03 浏览: 22
可以按照以下步骤实现:
1. 定义二维数组,输入各元素的值。
2. 定义一维数组 sum,用于存储各列元素的和。
3. 遍历二维数组,累加每一列元素的值并存储到 sum 数组中。
4. 对 sum 数组进行排序,同时记录下各列排序前的位置。
5. 根据记录的位置信息和排序后的 sum 数组,重新排列二维数组各列的元素。
代码如下:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int ROW = 3; // 行数
const int COL = 4; // 列数
void printArray(int arr[][COL]) {
for (int i = 0; i < ROW; ++i) {
for (int j = 0; j < COL; ++j) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int main() {
int arr[ROW][COL] = {{3, 5, 7, 1}, {2, 4, 9, 6}, {8, 0, 12, 10}}; // 二维数组
int sum[COL]; // 各列元素的和
int pos[COL]; // 各列排序前的位置
// 计算各列元素的和
for (int j = 0; j < COL; ++j) {
int s = 0;
for (int i = 0; i < ROW; ++i) {
s += arr[i][j];
}
sum[j] = s;
pos[j] = j;
}
// 按照各列元素的和从大到小排序
for (int i = 0; i < COL; ++i) {
for (int j = i + 1; j < COL; ++j) {
if (sum[i] < sum[j]) {
swap(sum[i], sum[j]);
swap(pos[i], pos[j]);
}
}
}
// 根据排序后的位置和元素重新排列二维数组
for (int j = 0; j < COL; ++j) {
int p = pos[j];
for (int i = 0; i < ROW; ++i) {
swap(arr[i][j], arr[i][p]);
}
}
printArray(arr);
return 0;
}
```
输出结果为:
```
7 5 3 1
9 4 2 6
12 0 8 10
```