c语言求概率

c语言求概率,第1张

这是典型的古典概型,直接用穷举法计算即可。

计算思路是遍历1到10共10个数的所有组合(用goNext函数),统计出组合总数count与7个数之和等于20的组数successNumber,这两个数的商successNumber/count就是所求的概率

计算结果为:

次数: 10000000, 成功次数: 26544, 概率: 0.0026544

程序可以如下实现:

#include <stdio.h>

int data[7]

int goNext()

{

int i

for ( i = 0i <7 &&++data[i] >10++i ) data[i] = 1

if ( i == 7 ) return 0

return 1

}

void main()

{

int i, m

double p

long count = 0, successNumber = 0

for ( i = 0i <7++i) data[i] = 1

do

{

++count

for ( i = 0, m = 0i <7++i ) m += data[i]

if ( 20 == m ) ++ successNumber

} while ( goNext() )

p = (double) successNumber / (double) count

printf("总次数: %d, 成功次数: %d, 概率: %.7lf\n", count, successNumber, p)

}

对哈,你是不放回,还是放回的呀,如果是非放回的是可以算的。假设每次取都是次数与d(n+1)的行数相等,即第n次总是取第n行的球,只要i不停的在d数组中变动,还是能满足楼主的条件的:

p=sym(zeros(70,1))

p(1)=1/70

d=sym(zeros(70,1))

d(50)=1

for n=[1:69]

p(n+1)=p(n)+1/(n+1)*[d(n+1)-p(n)]

end

我不知道你算的是什么概率,不过这个概率和不为1,原因很简单,因为

d(n+1)-p(n)很多情况下是负数,所以p(n+1)很多情况下是小于p(n)的,除非取到第i球(我设置i=50,直接写i不能非常难讨论了)时d(n+1)-p(n)才是正值,p(n+1)大于p(n)。

也可能是我理解楼主的问题不到位,忘各位不吝赐教!答案如下: 1/70

1/70

1/140

1/210

1/280

1/350

1/420

1/490

1/560

1/630

1/700

1/770

1/840

1/910

1/980

1/1050

1/1120

1/1190

1/1260

1/1330

1/1400

1/1470

1/1540

1/1610

1/1680

1/1750

1/1820

1/1890

1/1960

1/2030

1/2100

1/2170

1/2240

1/2310

1/2380

1/2450

1/2520

1/2590

1/2660

1/2730

1/2800

1/2870

1/2940

1/3010

1/3080

1/3150

1/3220

1/3290

1/3360

1/3430

71/3500 第五十行

71/3570

71/3640

71/3710

71/3780

71/3850

71/3920

71/3990

71/4060

71/4130

71/4200

71/4270

71/4340

71/4410

71/4480

71/4550

71/4620

71/4690

71/4760

71/4830

71/4900由此可见p(n)=1/n*70(n<i)时,p(n)=71/n*70(n>=i)时


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11517874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存