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)

}

我想是因为for (i=1b>=1i++)这一句无效。

前面b=0,循环条件是b>=1,所以不循环的。

另外b=b+0.1*pow(0.9,i-1)这句的0.1后面应该加上f,否则类型不对。

这个是改动过的代码

#include <stdio.h>

#include <math.h>

int main()

{

int i

long double b

b=0

for (i=1b<=1i++)

{

  b=b+0.1f*pow(0.9,i-1)

}

printf("%d\n", i)

return 0

}

时间有些晚了,答题态液有点仓促,不知道能枯销不能行,如果出现问帆败物题,希望海涵。

有两种办法:

第一尺升种就是用随机数进行模拟,然后进行至少100轮的模拟,取平均数

第二种就是用公式,根据概率学进行公式推导,然后使用C语言进行计算。

第一种并不能很准确,但是有说服力,模拟轮数越多越趋向于准确

第二种准确并有说服力,但是需要理论支持去计算。

公式的话:

全部可能出现的排列,是2的1000次方

特定位置可能出现满足的排列,比如前10个都是正面,剩下的随便族困携排列,就是2的990次方

特定位置数,一共是991个

所以,几率就是:991 * 2^990 / 2^1000

(好久没有算过了,可能不太对,但是思路差不多,你好好想想吧)

因为,前11个都是正面的,同时满足第一个和第二个位置的,是重复,需要排除一个,所以还需要额外考虑排除,需要进行处理一下……实际比上述的几率小,具体公式仍需推导……非专业人兆伏员帮不到你


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存