口袋中有5只红球,4只白球。随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂。但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计一下指定情况出现的次数对计算机来说是方便且快速的。同样,这个原理也适用于像天气预报这样复杂的系统过程。
以下的程序就是用于解决取球概率问题的。仔细阅读代码,补全空白的部分。
srand( (unsigned)time( NULL ) ); int n = ;
for(int i=; i<; i++)
{
char x[] = {, , , , , , , , };
int a = ; // 取到的红球的数目
int b = ; // 取到的白球的数目 for(int j=; j<; j++)
{
int k = rand() % (-j);
if(x[k]==)
a++;
else
b++; _______________________;
} if(a== && b==) n++;
} printf("概率=%f\n", n/100000.0*);
水题,数学题,概率。
填空处你需要做的是,把当前的最后一个球填到现在取出球的位置,即:x[k]=x[9-j-1];
rand()函数返回一个从srand赋的整数到21亿的整数。具体见:rand()-百度百科、rand函数-百度百科。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> int main()
{
srand( (unsigned)time( NULL ) ); int n = ;
for(int i=; i<; i++)
{
char x[] = {, , , , , , , , };
int a = ; // 取到的红球的数目
int b = ; // 取到的白球的数目 for(int j=; j<; j++)
{
int k = rand() % (-j);
if(x[k]==)
a++;
else
b++;
x[k]=x[-j-];
} if(a== && b==) n++;
} printf("概率=%f\n", n/100000.0*);
return ;
}
/* rand()函数不知道怎么用的可以用以下代码测试一下
int main()
{
srand( (unsigned)time( NULL ) );
while(getchar()){
int k = rand();
printf("%d\n",k);
}
}
*/
Freecode : www.cnblogs.com/yym2013