你可以帮我一个不同的程序。 ..它引入了一系列数字(无限制,你可以重复数字),显示每个数字输入的次数。 例: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;
}
答案 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