C++ OJ题数字统计 求解

在C++中解决数字统计的问题通常涉及读取输入、统计数字出现的次数,并输出结果。以下是一个详细的解决方案:

问题描述

给定一个包含多个数字的序列,统计每个数字出现的次数,并按照数字的大小顺序输出每个数字及其出现的次数。

解决方案步骤

  1. 输入处理

    • 从标准输入读取数字序列。可以使用cin读取输入,或者从文件中读取数据。
  2. 数据结构选择

    • 使用std::map或者std::unordered_map来存储数字及其出现的次数。std::map会自动按照键的顺序排序,而std::unordered_map在哈希表中存储,查找速度更快,但不会按照顺序输出。
  3. 统计数字出现次数

    • 遍历输入的数字序列,对每个数字在map中进行计数操作。
  4. 输出结果

    • 遍历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,输出每个数字及其出现的次数。

这个解决方案保证了输入数字的顺序和统计结果的正确性,适用于大部分数字统计的场景。