计数从随机生成的整数中重复的数字

时间:2013-07-11 15:01:30

标签: c++ random

此代码生成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次......等等。

我该怎么做?

2 个答案:

答案 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生成每个随机数。