数字范围和显示数字重复c ++

时间:2014-02-28 09:06:11

标签: c++ numbers repeat

你可以帮我一个不同的程序。 ..它引入了一系列数字(无限制,你可以重复数字),显示每个数字输入的次数。 例:1 3 4 3 3 6 1 结果: 1-2倍 3-3x 4-1x 6-1x

非常感谢。

#include <iostream>
#include <cstdlib>
using namespace std;
int rnd()
{
    int iRand = (rand() % 100) + 1;
}

int hundred_random()
{
    for (int rCount=0; rCount < 100; ++rCount)
    {
        cout << rnd() << endl;
    }
}

int main()
{
    cout << " The list of Hundred random numbers are- " << endl;
    hundred_random();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

为了计算每个数字在数字列表中出现的频率,您可以执行以下操作:

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

我们需要这些标题用于输出,存储数字,存储计数和rand()以生成示例。

std::vector<int> generate_numbers(int amount, int max_num)
{
    std::vector<int> numbers(amount);
    for (int i = 0; i < amount; ++i) {
        numbers[i] = rand() % max_num + 1;
    }
    return numbers;
}

生成一堆随机数的辅助方法。

std::map<int, int> count_numbers(const std::vector<int> &numbers)
{
    // Count numbers
    std::map<int, int> counts; // We will store the count in a map for fast lookup (C++11's unordered_map has even faster lookup)
    for (size_t i = 0; i < numbers.size(); ++i) { // For each number
        counts[numbers[i]]++; // Add 1 to its count
    }
    return counts;
}

上述方法进行计数,这是你问题的本质。对于我们遇到的每个数字,我们增加其数量。

void print_counts(const std::map<int, int> &counts)
{
    for(std::map<int, int>::const_iterator it = counts.begin();
        it != counts.end(); ++it) { // For each number stored in the map (this automatically filters those with count 0)
        std::cout << it->first << ": " << it->second << std::endl; // Output its count
    }
}

最后,一种显示结果的方法。由于我们从未对任何出现过零次的数字起作用,因此它们不在地图中,并且将从输出中省略。

int main() {
    srand(0); // So that we get the same result every time
    std::vector<int> numbers = generate_numbers(10000, 500);
    std::map<int, int> counts = count_numbers(numbers);
    return 0;
}

并将它们放在一起。 See this code run