我有一袋三个相等的球。我编写了代码来模拟每个球掉落的次数(到目前为止,它的工作无懈可击)。



#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%)时吐出一个白色的球?

最佳答案

int x = rand() % 3;


x将在0到2之间选择一个“随机”数字

如果x 如果x == 2,则为蓝色(33%)

10-06 07:25
查看更多