我有一个袋子,里面有三个相等的球。我做了代码来模拟每个球脱落的次数(到目前为止它工作得很完美)。
代码
#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%)?
3条答案
按热度按时间sqxo8psd1#
x将在0和2之间选择一个“随机”数字
如果x ≤ 1,则为白色(66%),如果x ≤ 2,则为蓝色(33%)
7vux5j2d2#
创建自己的函数
这将在33%的时间内返回蓝色,在66%的时间内返回白色
对于10个球,3个蓝色,3个白色和4个黑色:
trnvg8h33#
一种解决方法是: