给你一个n*n 的矩阵,统计每个元素所在的行,列。有多少个比它大的元素个数。c++
时间: 2024-05-16 10:18:25 浏览: 107
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Element {
int value;
int row;
int col;
};
bool cmp(const Element& a, const Element& b) {
return a.value < b.value;
}
int main() {
int n;
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n));
vector<Element> elements(n * n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
elements[i * n + j] = {matrix[i][j], i, j};
}
}
sort(elements.begin(), elements.end(), cmp);
vector<int> row_count(n), col_count(n);
vector<int> bigger_count(n * n);
for (int i = 0; i < n * n; i++) {
int value = elements[i].value;
int row = elements[i].row;
int col = elements[i].col;
row_count[row]++;
col_count[col]++;
for (int j = i + 1; j < n * n; j++) {
if (elements[j].value > value) {
bigger_count[i]++;
bigger_count[j]++;
} else {
break;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int index = i * n + j;
cout << row_count[i] + col_count[j] - 1 << " " << bigger_count[index] << " ";
}
cout << endl;
}
return 0;
}
```
首先读入矩阵,并将元素按照从小到大的顺序存储到`elements`数组中。同时,用`row_count`和`col_count`数组分别记录每一行和每一列出现的元素个数。
然后遍历`elements`数组,对于每一个元素,遍历其后面的元素,如果有比它大的,就在`bigger_count`数组中增加相应的计数,同时更新该元素所在行和列的计数。
最后,遍历矩阵,对于每一个元素,输出它所在行和列的计数之和减1(因为它自己被重复计算了),以及它的比它大的元素个数。
阅读全文