!{*(O^O)*}! 2025-03-21 17:06 采纳率: 88.5%
浏览 22
已结题

统计数字 时间限制:C/C++ 1000MS 内存限制:C/C++ 256MB

统计数字
时间限制:C/C++ 1000MS
内存限制:C/C++ 256MB
描述

某次科研调查时得到了n个自然数,每个数均不超过1500000000 ( 1.5 × 1 0^9 ) 已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入描述

共n + 1 行。
第一行是整数n,表示自然数的个数;第2至n + 1每行一个自然数。

输出描述

共m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出2个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

样例输入 1

8
2
4
2
4
5
100
2
100

样例输出 1

2 3
4 2
5 1
100 2

  • 写回答

3条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-03-21 17:07
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 要统计给定的n个自然数中每个数出现的次数。
      - 这些自然数范围在不超过(1.5×10^9),且不同的数不超过一定数量(题目中未明确给出完整条件,推测是要求高效统计,避免占用过多内存)。
    2. 解决方案
      - 可以使用哈希表来统计每个数出现的次数。在C++中,可以使用unordered_map来实现。示例代码如下:
    #include <iostream>
    #include <unordered_map>
    #include <vector>
    
    int main() {
        int n;
        std::cin >> n;
        std::unordered_map<int, int> countMap;
        for (int i = 0; i < n; ++i) {
            int num;
            std::cin >> num;
            if (countMap.find(num) != countMap.end()) {
                countMap[num]++;
            } else {
                countMap[num] = 1;
            }
        }
        // 输出统计结果
        for (const auto& pair : countMap) {
            std::cout << pair.first << " : " << pair.second << std::endl;
        }
        return 0;
    }
    
    • 上述代码首先读取输入的自然数个数n,然后遍历每个数,使用unordered_map来统计每个数出现的次数。如果数已经在哈希表中,就将其对应的值加1;否则,将其加入哈希表并初始化为1。最后遍历哈希表输出每个数及其出现的次数。
      3. 方案优缺点
    • 优点
      • 哈希表的查找和插入操作平均时间复杂度为(O(1)),效率较高,能够快速统计大量数字。
      • 代码实现相对简单直观。
    • 缺点
      • 需要额外的内存来存储哈希表,对于非常大的数据集可能会占用较多内存。
        4. 总结
    • 使用unordered_map统计数字出现次数是一种简洁高效的方法,适合处理本题中给定范围内的自然数统计问题。它能快速完成计数任务,并且代码逻辑清晰。但在处理超大规模数据集时,需要考虑内存占用情况。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月21日