C++ OJ题数字统计 求解
在C++中解决数字统计的问题通常涉及读取输入、统计数字出现的次数,并输出结果。以下是一个详细的解决方案:
问题描述
给定一个包含多个数字的序列,统计每个数字出现的次数,并按照数字的大小顺序输出每个数字及其出现的次数。
解决方案步骤
输入处理:
- 从标准输入读取数字序列。可以使用
cin
读取输入,或者从文件中读取数据。
- 从标准输入读取数字序列。可以使用
数据结构选择:
- 使用
std::map
或者std::unordered_map
来存储数字及其出现的次数。std::map
会自动按照键的顺序排序,而std::unordered_map
在哈希表中存储,查找速度更快,但不会按照顺序输出。
- 使用
统计数字出现次数:
- 遍历输入的数字序列,对每个数字在map中进行计数操作。
输出结果:
- 遍历map,按顺序输出每个数字及其出现的次数。
示例代码
cpp#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
void countNumbers(const vector<int>& numbers) {
unordered_map<int, int> countMap;
// 统计数字出现次数
for (int num : numbers) {
countMap[num]++;
}
// 将map中的内容转移到vector中,方便排序
vector<pair<int, int>> countVector(countMap.begin(), countMap.end());
// 按数字大小排序
sort(countVector.begin(), countVector.end());
// 输出结果
for (const auto& pair : countVector) {
cout << pair.first << " " << pair.second << endl;
}
}
int main() {
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; ++i) {
cin >> numbers[i];
}
countNumbers(numbers);
return 0;
}
解释和关键步骤
- countNumbers函数:使用
unordered_map<int, int>
来统计每个数字的出现次数。 - 排序:为了按照数字的大小顺序输出结果,将map中的内容转移到vector中,并使用
sort
函数对vector进行排序。 - 输出结果:遍历排序后的vector,输出每个数字及其出现的次数。
这个解决方案保证了输入数字的顺序和统计结果的正确性,适用于大部分数字统计的场景。