急!!!用C语言编写按概率生成随机数!!!

已知0-9这十个数出现的概率为0:0.071:0.142:0.073:0.144:0.15:0.16:0.87:0.98:0.139:0.8用C语言编写生成0-9中随机数... 已知0-9这十个数出现的概率为0:0.07 1:0.14 2:0.07 3:0.14 4:0.1 5:0.1 6:0.8 7:0.9 8:0.13 9:0.8
用C语言编写生成0-9中随机数,只要生成一个即可!
一定要用C语言写!
谢谢!!
展开
 我来答
匿名用户
2008-03-27
展开全部
其实这个问题很简单,按概率产生随机数,就不要把思想集中在随机数上,而是怎样计算概率的问题,在你的问题中,从概率着手。现在比如对于随机数0,它的概率是0.07,就是7%,程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<ctime.h>
srand((unsigned)time(NULL));
//在下面的函数中可以实现产生一个在一个区间之内的平均分布的随机数,精度是4位小数。
//用这个函数来产生0.00到0.80之间的随机数,就是概率
double AverageRandom(double min,double max)//0.00~0.80
{
int minInteger = (int)(min*10000);
int maxInteger = (int)(max*10000);
int randInteger = rand()*rand();
int diffInteger = maxInteger - minInteger;
int resultInteger = randInteger % diffInteger + minInteger;
return resultInteger/10000.0;
}

void main()
{
int n = AverageRandom(0.00,0.80);//产生0.00到0.80之间的随机数
int result;//这个才是要产生的随机数
for(int i=0;i<=100;i++)//100次
{
if(n>=0&&n<=0.07) //如果概率是0.07,那么随机数就让它是0
result = 0;
//else if(n<=)
//以后的一次类推,就可以了,
}

参考资料: 我这里只是个例子,供参考

qingzhumuzi
2008-04-01
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
float y[]={0.18,0.00,0.16,0.14,0.04,0.06,0.10,0.10,0.14, 0.08};
float s;
int i,j;
float rd_y;
int rd;
double r;
srand((unsigned)time(NULL));
s=y[0];
for(i=0;i<10;i++) if (y[i] > s) s = y[i];
for (j=0;j<12;j++)
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
rd_y = r * s;
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
rd = (int) (r * 10.0);
if (rd_y <= y[rd]) printf("%d ",rd);
}
printf("\n");
printf("\n");
getch();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
箕业赛恺乐
2019-03-23 · TA获得超过3754个赞
知道小有建树答主
回答量:3122
采纳率:26%
帮助的人:233万
展开全部
数据不全啊.
另外,
a~o的概率密度先算出来,
像1~9那样的格式就行了
然后从概率密度换算到分布率,
再用c随机就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
贾林庞乔
2019-07-01 · TA获得超过3746个赞
知道大有可为答主
回答量:3153
采纳率:33%
帮助的人:477万
展开全部
把所有概率乘以100,存进p[10]数组里
初始化数组,p[1]
=
p[1]
+
p[0];p[2]
=
p[2]
+
p[1];p[3]
=
p[3]
+
p[2];
int
x=rand()%100;
for(int
i=0;i<10;i++)
{
if
(x<p[i])
{
cout<<i+1;
break;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
皇家救星1985
2008-03-27 · TA获得超过1131个赞
知道大有可为答主
回答量:1579
采纳率:0%
帮助的人:1655万
展开全部
把所有概率乘以100,存进p[10]数组里

初始化数组,p[1] = p[1] + p[0];p[2] = p[2] + p[1];p[3] = p[3] + p[2];

int x=rand()%100;

for(int i=0;i<10;i++)
{
if (x<p[i])
{
cout<<i+1;
break;
}
}

参考资料: 其实就是把LS的改了一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式