在掷硬币和掷骰子时使用rand()

时间:2014-02-14 00:56:28

标签: c

我现在完全糊涂了。因此,我正在阅读本课程中的练习,因为我自己学习C语,所以我很难知道这些内容。这是练习:

说明

  

编写一个程序,模拟以下随机     使用C标准中的rand()函数的事件     库。我们有兴趣确定是否rand()     实际上似乎产生了一组随机值。去做这个     我们会重复这个事件一定次数并看看     我们多久得到一次可能的结果。如果rand()     是真正随机的,我们对可能结果的映射是     统一,我们的结果应该同样可能,因此     均匀分布在所有可能的结果中。

     

这两个事件将是:

     
      
  1. 掷硬币
  2.   
  3. 滚动六面模具
  4.         

    重复每个事件:

         
        
    1. 10
    2.   
    3. 100
    4.   
    5. 1000
    6.   
    7. 10,000
    8.   
    9. 100,000次
    10.         

      在每组重复中,计算每个结果的频率     发生。然后计算总事件的百分比     由每个结果代表。

例如:

Coin:
----
  Flips: 10       Heads: 40%
                  Tails: 60%
Die:
----
  Rolls: 10       1: 10%
                  2:  0%
                  3: 20%
                  4: 30%
                  5: 30%
                  6: 10%

          ...

Coin:
----
  Flips: 100000   Heads: 49%
                  Tails: 51%

Die:
----
  Rolls: 100000   1: 17%
                  2: 18%
                  3: 17%
                  4: 17%
                  5: 17%
                  6: 16%

目前我有:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, value, n;
    int flips[2] = {0};
    int rolls[6] = {0};

    for(n = 10; n <= 100000; n *= 10){
       for(i=0; i < n; i++){
       value = rand( )%2;
       flips[value]++;

       value = rand( )%6;
       rolls[value]++;
       }

       printf("Coin:\n____\n  Flips: %d\n",n);
       printf("    Heads: %d%%\n", ((flips[0] * 100) / n));
       printf("    Tails: %d%%\n\n", ((flips[1] * 100) / n));

       printf("Die:\n____\n  Rolls: %d\n",n);
       printf("    1: %d%%\n", rolls[0]);
       printf("    2: %d%%\n", rolls[1]);
       printf("    3: %d%%\n", rolls[2]);
       printf("    4: %d%%\n", rolls[3]);
       printf("    5: %d%%\n", rolls[4]);
       printf("    6: %d%%\n", rolls[5]);
    }

    return 0;
}

*对不起,我并没有真正专注于模具输出,只是试图让硬币首先工作

1 个答案:

答案 0 :(得分:1)

我接受了您的代码并应用了我建议的更改,并展示了如何计算百分比。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, value, n;
    static const char *sides[] = {"Heads", "Tails"};
    int flips[2] = {0};
    int rolls[6] = {0};

    i = 0;

    for(n = 10; n <= 100000; n *= 10){
       for(; i < n; i++){
         value = rand( )%2;
         flips[value]++;

         value = rand( )%6;
         rolls[value]++;
       }

       printf("Coin:\n____\n  Flips: %d\n",i);
       for(j = 0; j < 2; j++) {
           printf("    %s: %d%%\n", sides[j], 100*flips[j]/i);
       }

       printf("Die:\n____\n  Rolls: %d\n",i);
       for(j = 0; j < 6; j++) {
           printf("    %d: %d%%\n", j, 100*rolls[j]/i);
       }
    }
    return 0;
}