当前位置:首页 C++ > 正文

c++统计数组中每个数字出现的次数

作者:野牛程序员:2023-06-19 23:15:59 C++阅读 4707

在 C++ 中,你可以使用 std::mapstd::unordered_map 来统计数组中每个数字出现的次数。以下是一个使用 std::map 的示例代码:

#include <iostream>
#include <map>
#include <vector>

int main() {
    std::vector<int> arr = {1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3};

    std::map<int, int> countMap;

    // 遍历数组,统计每个数字出现的次数
    for (int num : arr) {
        countMap[num]++;
    }

    // 输出结果
    for (const auto& pair : countMap) {
        std::cout << "Number: " << pair.first << ", Count: " << pair.second << std::endl;
    }

    return 0;
}

这个示例中,我们首先定义了一个整数数组 arr,包含了一些数字。然后,我们创建了一个 std::map<int, int> 类型的 countMap,其中 int 表示数组中的数字,int 表示对应数字出现的次数。

接下来,我们使用一个循环遍历数组 arr,对每个数字进行计数。我们使用 countMap[num]++ 来增加对应数字的计数器。

最后,我们再次遍历 countMap,输出每个数字以及它们出现的次数。

运行这段代码将输出以下结果:

Number: 1, Count: 3
Number: 2, Count: 3
Number: 3, Count: 3
Number: 4, Count: 1
Number: 5, Count: 1

这表示数字 1、2 和 3 在数组中各自出现了 3 次,而数字 4 和 5 分别只出现了 1 次。


如果不使用 std::map,可以使用一个数组来统计数字出现的次数。假设数组中的数字范围在 0 到 100 之间,可以创建一个大小为 101 的整型数组,将数组的索引与数字对应起来,数组的值表示该数字出现的次数。

以下是使用数组统计数字出现次数的示例代码:

#include <iostream>
#include <vector>

const int MAX_NUMBER = 100;

int main() {
    std::vector<int> arr = {1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3};

    // 创建一个大小为 MAX_NUMBER+1 的数组,初始化为 0
    int countArr[MAX_NUMBER + 1] = {0};

    // 遍历数组,统计每个数字出现的次数
    for (int num : arr) {
        countArr[num]++;
    }

    // 输出结果
    for (int i = 0; i <= MAX_NUMBER; i++) {
        if (countArr[i] > 0) {
            std::cout << "Number: " << i << ", Count: " << countArr[i] << std::endl;
        }
    }

    return 0;
}

在这个示例中,我们使用一个大小为 MAX_NUMBER + 1 的数组 countArr,其中 MAX_NUMBER 表示数字的最大值。我们将数组的索引与数字对应起来,索引为数字,数组的值为该数字出现的次数。

接下来,我们遍历数组 arr,对每个数字进行计数,通过 countArr[num]++ 增加对应数字的计数器。

最后,我们再次遍历 countArr 数组,输出每个非零元素的索引和值,即数字和出现的次数。

运行这段代码将输出以下结果:

Number: 1, Count: 3
Number: 2, Count: 3
Number: 3, Count: 3
Number: 4, Count: 1
Number: 5, Count: 1

结果与使用 std::map 相同,表示数字 1、2 和 3 在数组中各自出现了 3 次,而数字 4 和 5 分别只出现了 1 次。

for (int num : arr) {
        countArr[num]++;
}

这段代码使用的是 C++11 中引入的范围基础循环(Range-based for loop)语法,也称为 foreach 循环。它是一种简化循环遍历容器元素的方式。

在这段代码中,for (int num : arr) 表示对于数组 arr 中的每个元素,将其赋值给变量 num,然后执行循环体中的代码块。循环将遍历整个数组,并依次将数组中的元素赋值给 num,使你能够方便地访问数组中的每个元素。

在每次循环迭代中,countArr[num]++ 将根据当前的 num 值递增 countArr 数组中对应索引的值,实现了对数字出现次数的统计。

这种范围基础循环语法简化了传统的使用索引进行循环的写法,使代码更加简洁和易读。它适用于遍历各种容器,如数组、向量、列表等。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击