口袋中有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