2023-11-01 20:26来源:m.sf1369.com作者:宇宇
现成的函数没有,可以通过产生随机数实现概率。
srand((unsigned)time(NULL));
int m,r=0;
m=rand()%10;
if(m==1||m==2||m==3||m==4||m==5||m==6||m==7)
{
r=r+1;
}
这段代码中,执行r=r+1的概率就是0.7
希望可以帮到你
像概率计算这样的一般性应用,几乎所有的第三代语言都可以完成。如果要进行大规模计算,适合选择高效率的C/C++或者汇编语言;如果要适合初学者,可以用Basic或者Fortran。
p1=pro(m-1,n,x-1,y-1);
p2=pro(m,n-1,x-1,y);
#include #include main() { int x[28]; int d,d1,d2,d3; int i,flag; float sum=0; for (i=0;i<28;i++) x[i]=0; srand((unsigned)time(NULL)); // 每次计算都随机则要此句 while (1){ d1=rand() % 10; d2=rand() % 10; d3=rand() % 10; // 取3个随机数 d = d1+d2+d3; // 之和 x[d]=x[d]+1; // 此数个数增1 flag = 1; for (i=0;i<28;i++) if (x[i]==0) flag = 0; // 全部算得 的判断 if (flag==1) break; // 成功 } // 输出 0-27 各数出现次数 for (i=0;i<28;i++) printf(%d -- %d\n,i,x[i]); for (i=0;i<28;i++) sum = sum + x[i]; printf(\n); // 输出 0-27 各数出现次数的百分比(概率) for (i=0;i<28;i++) printf(%d -- %.2f%c\n,i,x[i]/sum*100.0,'%'); return 0; }
这是典型的古典概型,直接用穷举法计算即可。
计算思路是遍历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 = 0; i < 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 = 0; i < 7; ++i) data[i] = 1;
do
{
++count;
for ( i = 0, m = 0; i < 7; ++i ) m += data[i];
if ( 20 == m ) ++ successNumber;
} while ( goNext() );
p = (double) successNumber / (double) count;
printf(总次数: %d, 成功次数: %d, 概率: %.7lf\n, count, successNumber, p);
}