关于按照一定概率产生随机数的问题:
计算机产生的随机数是一种均匀分布的随机数,比如用c语言产生0~9的随机数,那么每个随机数产生的频率大约都是0.1,比如
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
int i;
srand((unsigned)time(NULL));
int x;
int num[10];
for(i=0;i<10;i++)
num[i]=0;
for(i=0;i<10000;i++)
{
x= rand()%10;
switch(x)
{
case 0:
num[0]+=1;
break;
case 1:
num[1]+=1;
break;
case 2:
num[2]+=1;
break;
case 3:
num[3]+=1;
break;
case 4:
num[4]+=1;
break;
case 5:
num[5]+=1;
break;
case 6:
num[6]+=1;
break;
case 7:
num[7]+=1;
break;
case 8:
num[8]+=1;
break;
case 9:
num[9]+=1;
break;
}
}
for(i=0;i<10;i++)
{
printf("%d 概率 %f\n",i,num[i]/10000.0);
}
}
那么输出结果每次略有不同,但大都在0.1浮动
现在,我想产生71~100的随机数,其中71~80的概率为0.2,81~90概率为0.6,91~100的概率为0.2。
那么,我依旧从0~9开始先产生概率,再产生随机数
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
srand((unsigned)time(NULL));
int i;
int x;
int num[3];
for(i=0;i<3;i++)
num[i]=0;
matlab中printf输出格式 for(i=0;i<10000;i++)
{
x=rand()%10;
switch(x)
{
case 0:
case 1:
printf("%d\n",rand()%10+71);
num[0]+=1;
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
printf("%d\n",rand()%10+81);
//rand()%10+81;
num[1]+=1;
break;
case 8:
case 9:
printf("%d\n",rand()%10+91);
//rand()%10+91;
num[2]+=1;
break;
}
}
for(i=0;i<3;i++)
printf("随机数%f\n",num[i]/10000.0);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论