C++实现多重集合的重数和众数计算
多重集合的重数和众数
给定含有N个元素的多重集合S,每个元素在S中出现的次数称为该元素的'重数',多重集合S中'重数'最大的元素称为多重集合S的'众数','众数'的'重数'称为多重集合S的'重数'。
实现思路
- 遍历多重集合S,使用哈希表记录每个元素出现的次数。
- 找到哈希表中出现次数最多的元素,即为'众数'。
- 计算'众数'的'重数',即为哈希表中'众数'对应的值。
- 遍历哈希表,累加每个元素的'重数',即为多重集合S的'重数'。
伪代码
// 初始化哈希表
map<int, int> countMap;
int mode = 0; // 众数
int maxCount = 0; // 众数出现的次数
int totalCount = 0; // 多重集合S的重数
// 遍历多重集合S
for (int i = 0; i < N; i++) {
// 将元素插入哈希表或更新哈希表中元素的计数器
countMap[S[i]]++;
// 更新众数和众数出现的次数
if (countMap[S[i]] > maxCount) {
maxCount = countMap[S[i]];
mode = S[i];
}
}
// 计算多重集合S的重数
for (auto it : countMap) {
totalCount += it.second;
}
C++代码
#include <iostream>
#include <map>
using namespace std;
int main() {
int N;
cin >> N;
// 读入多重集合S
int S[N];
for (int i = 0; i < N; i++) {
cin >> S[i];
}
// 初始化哈希表
map<int, int> countMap;
int mode = 0; // 众数
int maxCount = 0; // 众数出现的次数
int totalCount = 0; // 多重集合S的重数
// 遍历多重集合S
for (int i = 0; i < N; i++) {
// 将元素插入哈希表或更新哈希表中元素的计数器
countMap[S[i]]++;
// 更新众数和众数出现的次数
if (countMap[S[i]] > maxCount) {
maxCount = countMap[S[i]];
mode = S[i];
}
}
// 计算多重集合S的重数
for (auto it : countMap) {
totalCount += it.second;
}
// 输出结果
cout << "多重集合S的重数:" << totalCount << endl;
cout << "多重集合S的众数:" << mode << endl;
cout << "多重集合S的重数:" << maxCount << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/lm1v 著作权归作者所有。请勿转载和采集!