蓝桥杯 C/C++参考题目 取球概率(数学题,概率)

口袋中有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             else
16                 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亿的整数。具体见:rand()-百度百科rand函数-百度百科

  代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 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             else
22                 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 : www.cnblogs.com/yym2013

posted @ 2014-03-12 21:09  Freecode#  阅读(1303)  评论(0编辑  收藏  举报