藍橋杯-奪冠概率模擬(取隨機數)
奪冠概率模擬
足球比賽具有一定程度的偶然性,弱隊也有戰勝強隊的可能。
假設有甲、乙、丙、丁四個球隊。根據他們過去比賽的成績,得出每個隊與另一個隊對陣時取勝的概率表:
甲 乙 丙 丁
甲 - 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萬次模擬,計算出甲隊奪冠的概率。
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
解題思路:
將所有組隊情況列舉出來,分3大類6小類計算出甲能取勝的概率:
double a=0.1*0.2*0.3+0.1*0.8*0.5;//預賽:甲乙、丙丁;決賽:甲vs丙/甲vs丁
double b=0.3*0.4*0.1+0.3*0.6*0.5;//預賽:甲丙、乙丁;決賽:甲vs乙/甲vs丁
double c=0.5*0.7*0.1+0.5*0.3*0.3;//預賽:甲丁、乙丙;決賽:甲vs乙/甲vs丙
然後在十萬次迴圈中,使用隨機數在0/1/2三個數中隨機取值,作為當前3個分組情況的模擬。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <ctime>
#include <algorithm>
using namespace std;
double arr[3];
/****
甲 乙 丙 丁
甲 - 0.1 0.3 0.5
乙 0.9 - 0.7 0.4
丙 0.7 0.3 - 0.2
丁 0.5 0.6 0.8 -
****/
double a=0.1*0.2*0.3+0.1*0.8*0.5;//預賽:甲乙、丙丁;決賽:甲vs丙/甲vs丁
double b=0.3*0.4*0.1+0.3*0.6*0.5;//預賽:甲丙、乙丁;決賽:甲vs乙/甲vs丁
double c=0.5*0.7*0.1+0.5*0.3*0.3;//預賽:甲丁、乙丙;決賽:甲vs乙/甲vs丙
int main()
{
int n=100000;//迴圈次數是十萬次
double ans;
int i;
int c1,c2,c3;
c1=c2=c3=0;
srand(time(0));//需要用當前時間作“種子”,以便每次執行取得的序列不同
while(n--)
{
i=rand()%3; //產生0-10的隨機數
//cout<<i;
switch(i)
{
case 0:
ans+=a;//++c1;
break;
case 1:
ans+=b;//++c2;
break;
case 2:
ans+=c;//++c3;
break;
}
}
//cout<<c1<<" "<<c2<<" "<<c3<<endl;
cout<<ans/100000<<endl;
return 0;
}
/*
*/
相關文章
- 【藍橋杯考前突擊】第十一屆藍橋杯校賽模擬C/C++ 正整數序列C++
- 2017藍橋杯javaC組模擬題5Java
- 藍橋杯-帶分數
- 藍橋杯-地宮取寶
- 藍橋杯-波動數列
- 藍橋杯-合併數列
- [藍橋杯][演算法訓練VIP]方格取數演算法
- [藍橋杯][演算法提高VIP]奪寶奇兵 dp演算法
- 藍橋杯-買不到的數目
- 藍橋杯-連號區間數
- 藍橋杯 排序排序
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯-N皇后
- 藍橋杯真題
- 第十四屆藍橋杯第一期模擬賽 pythonPython
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 藍橋杯-從串中取三個不同字元字元
- 藍橋杯年號字串字串
- 藍橋杯-翻硬幣
- 藍橋杯-螞蟻感冒
- 藍橋杯 計算方程
- 藍橋杯-座次問題
- 藍橋杯-長草(BFS)
- 藍橋杯-日期問題
- 藍橋杯-班級活動
- 概率論04 隨機變數隨機變數
- [藍橋杯][演算法提高VIP]大數加法演算法
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯:基礎練習 查詢整數
- 藍橋杯 【基礎練習】 特殊迴文數
- 【每週例題】藍橋杯 C++ 多數C++
- 藍橋杯-M次方根(實數二分)
- 藍橋杯-子 2023 / 雙子數
- 藍橋杯——查詢的妙趣
- 密碼脫落——藍橋杯密碼
- 藍橋杯-串的處理
- 藍橋杯-回形巢狀巢狀
- 藍橋杯-分巧克力