错题集

来源:互联网 发布:越南女孩 知乎 编辑:程序博客网 时间:2024/05/17 07:37

1.

口袋中有5只红球,4只白球。随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂。但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计一下指定情况出现的次数对计算机来说是方便且快速的。同样,这个原理也适用于像天气预报这样复杂的系统过程。

以下的程序就是用于解决取球概率问题的。仔细阅读代码,补全空白的部分。

    srand( (unsigned)time( NULL ) );

    int n = 0;

    for(int i=0; i<100000; i++)

    {

        char x[] = {1, 1, 1, 1, 1, 2, 2, 2, 2};

        int a = 0;  // 取到的红球的数目

        int b = 0;  // 取到的白球的数目

        for(int j=0; j<3; j++)

        {

            int k = rand() % (9-j);

            if(x[k]==1)

                a++;

            else

                b++;

            _______________________;

        }

        if(a==1 && b==2) n++;

    }

    printf("概率=%f\n",n/100000.0*100);

// 注意是无放回的

答案:  x[k] = x[9-j-1]

当然,9-1-j    9-(j+1)   9-(1+j) 都是可能的写法。

等同于:for (int p = k + 1; p < 9; p++) x[p] = x[p-1];

--来自软件设计大赛(选择题样题)

 

 

2.

因数分解是十分基本的数学运算,应用广泛。下面的程序对整数n(n>1)进行因数分解。比如,n=60,则输出:2 2 3 5。请补充缺失的部分。

void f(int n)

{

    for(int i=2; i<n/2; i++)

    {

        ____________________

        {

            printf("%d ", i);

            n = n / i;

        }

    }

    if(n>1) printf("%d\n", n);

}

 

参考答案: while(n % i == 0)

注意: for(;n%i==0;)  逻辑上也是正确的,但中间出现分号,与说明相违。

--来自软件设计大赛选择题样题