2013蓝桥杯 CC++程序设计本科A组 夺冠概率

足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。

    假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:

    甲  乙  丙  丁   
甲   -  0.1 0.3 0.5
乙 0.9  -   0.7 0.4 
丙 0.7  0.3 -   0.2
丁 0.5  0.6 0.8 -

    数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...

    现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。(参见【1.jpg】)

    请你进行10万次模拟,计算出甲队夺冠的概率。


    注意:

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
    
    在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

    请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
    
    相关的工程文件不要拷入。
    
    源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。
    
    允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。


#include <iostream>
#include <stdlib.h> /*用到了srand函数,所以要有这个头文件*/
using namespace std;

//1 + 1
//......
//  2
//C
//  4
int main()
{
    srand(time(NULL));//种子为系统时间
    int s = 0;
    int sum = 0;
    int t;
    while(s <= 1e5)//十万次模拟
    {
        t = rand() % 3;
        if(t == 0)//a & b
        {
            t = rand() % 10;
            if(t == 0)//a win b
            {
                t = rand() % 10;
                if(t >= 3)//c win d
                {
                    t = rand() % 10;
                    if(t <= 2)// a win c
                        sum ++;
                }
                else// d win c
                {
                    t = rand() % 10;
                    if(t <= 4)// a win d
                        sum++;
                }
            }
        }
        else if(t == 1)//a & c
        {
            t = rand() % 10;
            if(t <= 2) // a win c
            {
                t = rand()% 10;
                if(t <= 3) // b win d
                {
                    t = rand()% 10;
                    if(t == 0)//a win b
                        sum ++;
                }
                else//d win b
                {
                    t = rand() % 10;
                    if(t <= 4 )//a win d
                        sum ++;
                }
            }
        }
        else
        {
            t = rand()%10;
            if(t <= 4)//a win d
            {
                t = rand() % 10;
                if(t >= 3)//b win c
                {
                    t = rand() % 10;
                    if(t == 0)// a win b
                        sum++;
                }
                else // c win b
                {
                    t = rand() % 10;
                    if(t <= 2) // a win c
                        sum++;

                }
            }
        }
        s++;
    }
    double result = sum / 1e5;
    cout << result << endl;

    return 0;
}


你可能感兴趣的:(2013蓝桥杯 CC++程序设计本科A组 夺冠概率)