口袋中有5只红球,4只白球。随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂。但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计一下指定情况出现的次数对计算机来说是方便且快速的。同样,这个原理也适用于像天气预报这样复杂的系统过程。
以下的程序就是用于解决取球概率问题的。仔细阅读代码,补全空白的部分。
1 srand( (unsigned)time( NULL ) ); 2 3 int n = 0; 4 for(int i=0; i<100000; i++) 5 { 6 char x[] = { 1, 1, 1, 1, 1, 2, 2, 2, 2}; 7 int a = 0; // 取到的红球的数目 8 int b = 0; // 取到的白球的数目 9 10 for(int j=0; j<3; j++)11 {12 int k = rand() % (9-j);13 if(x[k]==1) 14 a++;15 else16 b++;17 18 _______________________;19 }20 21 if(a==1 && b==2) n++;22 }23 24 printf("概率=%f\n", n/100000.0*100);
水题,数学题,概率。
填空处你需要做的是,把当前的最后一个球填到现在取出球的位置,即:x[k]=x[9-j-1];
rand()函数返回一个从srand赋的整数到21亿的整数。具体见:、。
代码:
1 #include2 #include 3 #include 4 5 int main() 6 { 7 srand( (unsigned)time( NULL ) ); 8 9 int n = 0;10 for(int i=0; i<100000; i++)11 {12 char x[] = { 1, 1, 1, 1, 1, 2, 2, 2, 2};13 int a = 0; // 取到的红球的数目14 int b = 0; // 取到的白球的数目15 16 for(int j=0; j<3; j++)17 {18 int k = rand() % (9-j);19 if(x[k]==1) 20 a++;21 else22 b++; 23 x[k]=x[9-j-1];24 }25 26 if(a==1 && b==2) n++;27 }28 29 printf("概率=%f\n", n/100000.0*100);30 return 0;31 }32 /* rand()函数不知道怎么用的可以用以下代码测试一下33 int main()34 {35 srand( (unsigned)time( NULL ) );36 while(getchar()){37 int k = rand();38 printf("%d\n",k);39 }40 }41 */
Freecode :