-5

此代码生成 100 个介于 1 到 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 次……等等。

我该怎么做?

4

2 回答 2

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;
    }
于 2013-07-11T15:53:00.787 回答
1

按照评论所说的,一种非常快速和肮脏的方法是简单地定义一个 100 元素的整数数组(初始化为 0),使用随机数本身作为索引,并在每次随机时将数组元素增加 1产生的号码。

于 2013-07-11T15:11:11.463 回答