此代码生成1到100之间的100个随机数。
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main() {
srand(time(NULL));
for (int i = 0; i < 100; ++i)
{
cout << rand() % 100 + 1 << "\t"; //number between 1 and 100
if ((i+1) % 5 == 0)
cout << endl;
}
return 0;
}
我想在此代码中添加一个函数,以便计算在输出中重复一个数字的次数。例如,在此结果中 -
56 96 75 53 67
89 23 26 27 99
30 29 2 63 27
32 49 18 79 16
56 31 95 46 82
30 63 68 68 100
7 23 95 81 75
13 21 97 39 99
48 68 28 49 83
6 32 31 23 11
98 30 93 93 76
74 74 38 42 41
37 48 16 84 81
90 48 1 39 86
52 86 6 79 86
88 36 17 70 11
27 19 40 71 63
67 45 37 56 38
29 45 85 44 80
17 86 27 70 76
86号重复3次
56号重复3次
89号重复了1次......等等。
我该怎么做?
答案 0 :(得分:2)
那样的东西...... 注意:我试图考虑一些评论
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <map>
#include <algorithm>
int main()
{
srand(time(NULL));
std::map<int,int> histo;
int N = 1 , M = 100;
for (int i = 0; i < M; ++i)
{
int rnd = M + rand() / (RAND_MAX / (N - M + 1) + 1);
histo[rnd] += 1;
std::cout << rnd << std::endl;
if ((i+1) % 5 == 0)
std::cout << std::endl;
}
for(auto var = begin(histo) ; var != end(histo) ; ++var)
{
std::cout << var->first << " have " << var->second << " occurence " << std::endl;
}
return 0;
}
答案 1 :(得分:1)
根据评论所说的,一个非常快速和肮脏的方法是简单地定义一个100个元素的整数数组(初始化为0),使用随机数本身作为索引并将数组元素增加1生成每个随机数。