统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。哈希表,map。

题目

在这里插入图片描述

代码

代码一
利用哈希表

#include <iostream>
#include <map>
using namespace std;
const int maxn = 1e5 + 100;
int hashTable[maxn] = { 0 };

int main() {
    int n;
    cin >> n;
    int num, max_num = -1;
    for (int i = 0; i < n; i++) {
        cin >> num;
        hashTable[num]++;//对应次数加一
        if (num > max_num) max_num = num;//记录出现的最大值
    }
    for (int i = 0; i <= max_num; i++) {//按自然数从小到大输出
        if (hashTable[i] != 0) {
            cout << i << " " << hashTable[i] << endl;
        }
    }
    return 0;
}

代码二
利用map

#include <iostream>
#include <map>
using namespace std;
map<int, int> m;

int main() {
    int n;
    cin >> n;
    int num;
    for (int i = 0; i < n; i++) {
        cin >> num;
        m[num]++;//对应次数加一
    }
    map<int, int>::iterator it;
    //map自动排序了,按顺序输出
    for (it = m.begin(); it != m.end(); it++) {
        cout << it->first << " " << it->second << endl;
    }
    return 0;
}

### 回答1: 这道题目要求统计给定的n个自然数出现次数,并按照自然数从小到大顺序输出统计结果。已知这些自然数不超过150000000,且不相同的数不超过10000个。 解决这道题目可以使用哈希表统计每个自然数出现次数,然后按照自然数从小到大顺序输出统计结果。具体步骤如下: 1. 创建一个哈希表,用于存储每个自然数出现次数。 2. 遍历给定的n个自然数,对于每个自然数,如果它已经在哈希表出现过,则将它的出现次数加1;否则,将它添加到哈希表中,并将它的出现次数设置为1。 3. 遍历哈希表中的所有自然数,按照自然数从小到大顺序输出它们的出现次数。 这样就可以得到每个自然数出现次数,并按照自然数从小到大顺序输出统计结果。 ### 回答2: 根据题目要求,已知n个自然数,每个数均不超过1.5亿,且不相同的数不超过1万个。现在需要统计这些自然数各自出现次数,并按照自然数从小到大顺序输出统计结果。 首先,为了实现统计,可以使用一个长度为1.5亿+1的数组count,用于统计每个自然数出现次数。初始化数组元素都为0。 然后,遍历得到的n个自然数,对于每个自然数num,将count[num]的值加1,表示该数出现次数增加1。 接下来,创建一个结果数组result,用于存储统计结果。再创建一个变量index,用于记录result数组的当前索引位置,初始化为0。 接着,依次遍历数组count,从1开始到1.5亿,如果count[i]的值大于0,说明i这个自然数出现了count[i]次,将其写入到result数组的index位置,并将index加1。 最后,输出result数组中的统计结果,即为按照自然数从小到大顺序输出统计结果。 总结:根据题目给出的条件,可以通过使用数组来统计自然数出现次数。遍历得到的n个自然数,对每个自然数进行计数,最后根据自然数的大小顺序输出统计结果即可。 ### 回答3: 假设我们已经将所有的自然数存储在一个长度为n的数组中。 首先,我们可以创建一个大小为1500000000(1.5*10^9)的数组count,用于存储每个自然数出现次数。将数组中的所有元素都初始化为0。 然后,我们遍历给定的n个自然数,并通过数组的索引将每个自然数出现次数增加1,即count[自然数]++。 接下来,我们创建一个大小为10000的数组result,用于存储统计结果。遍历count数组,若某个自然数出现次数大于0,则将该自然数和其出现次数以一个元组的形式存储在result数组中。 最后,我们根据result数组中自然数的大小,对result数组进行排序,按照从小到大顺序输出统计结果。 以下是具体的实现代码(使用Python语言): ``` def count_numbers(n, nums): count = [0] * (1500000000 + 1) # 创建大小为1.5*10^9的数组count for num in nums: count[num] += 1 # 根据每个自然数的值增加出现次数 result = [] for i in range(1, len(count)): if count[i] > 0: result.append((i, count[i])) # 将自然数出现次数存储在result数组中 result.sort() # 对result数组按照自然数的大小进行排序 for num, frequency in result: print(num, frequency) # 按照自然数从小到大顺序输出统计结果 n = int(input("请输入自然数个数:")) nums = [] print("请逐行输入自然数:") for _ in range(n): nums.append(int(input())) count_numbers(n, nums) ``` 这段代码首先读取自然数个数n,然后逐行输入n个自然数。最后调用count_numbers函数进行统计并按照要求输出结果。 注意:由于数据量比较大,统计过程可能较为耗时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotJunz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值