C语言 如何根据概率定义兰德()?

lc8prwob  于 2023-03-29  发布在  其他
关注(0)|答案(3)|浏览(127)

我有一个袋子,里面有三个相等的球。我做了代码来模拟每个球脱落的次数(到目前为止它工作得很完美)。

代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>

#define N 50 /* Number of simulations*/
#define P 3  /* Number of of balls*/

unsigned long long millitime2(){
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (unsigned long long)(tv.tv_usec);
}

int main() {
    int i;
    int num = 0;
    int *v;
    if((v = malloc(N*sizeof(int))) == NULL){
        printf("\n\tMEMORY ERROR");
        exit(1);
    }
    memset(v,0,N);
    printf("\nexpected freq: %f\n\n", ((float)1/(float)P)*100);

    for (i=0; i<N; i++){
        srand(millitime2());
        num = (rand()%P);
        v[num]++;
    }
    for(i=0;i<P;i++){
        printf("ball:%d   picked:%d/%d   freq:%f\n",i+1,v[i],N,((float)v[i]/(float)N)*100);
    }
    printf("\n");
    return 0;
}

但现在我所做的研究要求从三个球;一个球是蓝色的,两个球是白色的。
rand()的行中,我必须改变什么,所以它三次中有一次吐出蓝色球(~33%),三次中有两次吐出白色球(~66%)?

sqxo8psd

sqxo8psd1#

int x = rand() % 3;

x将在0和2之间选择一个“随机”数字
如果x ≤ 1,则为白色(66%),如果x ≤ 2,则为蓝色(33%)

7vux5j2d

7vux5j2d2#

创建自己的函数

#define BLUE 1
#define WHITE 2

int whichBall()
{
  int val = rand() % P;
  if (val == 0)
    return BLUE;
  return WHITE;
}

这将在33%的时间内返回蓝色,在66%的时间内返回白色
对于10个球,3个蓝色,3个白色和4个黑色:

#define BLUE = 3
#define WHITE = 3
#define BLACK = 4

int whichBall()
{
  int val = rand() % P;
  if (val < BLUE)
    return BLUE;
  if (val < BLUE + WHITE)
    return WHITE;
  if (val < BLUE + WHITE + BLACK)
    return BLACK
  return BLACK;//This line should never be reached but is included so it compiles
}
trnvg8h3

trnvg8h33#

一种解决方法是:

  • 想象一下,有一个袋子,里面有10个球,3个红色,3个蓝色,3个绿色和1个白色。
  • 得到一个数组[10]。
  • [1][2][3][4][5][6][7][8][8][9][9][10][11][12][13][14][15][16][17][18][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19][19]19][19][
  • 调用rand()%10 =数组的index
  • 你会得到大约30%的红色,30%的蓝色,30%的绿色和10%的白色。

相关问题