第三届蓝桥杯C/C++组第九题 足球比赛(概率论+随机数)
? 足球比賽具有一定程度的偶然性,弱隊也有戰(zhàn)勝強隊的可能。
?
??? 假設有甲、乙、丙、丁四個球隊。根據他們過去比賽的成績,得出每個隊與另一個隊對陣時取勝的概率表:
?
??? 甲? 乙? 丙? 丁??
甲?? -? 0.10.3 0.5
乙 0.9? -?? 0.70.4
丙 0.7? 0.3 -??0.2
丁 0.5? 0.6 0.8 -
?
??? 數(shù)據含義:甲對乙的取勝概率為0.1,丙對乙的勝率為0.3,...
?
??? 現(xiàn)在要舉行一次錦標賽。雙方抽簽,分兩個組比,獲勝的兩個隊再爭奪冠軍。(參見【1.jpg】)
?
??? 請你進行10萬次模擬,計算出甲隊奪冠的概率。
?
?
??? 注意:
?
??? 請仔細調試!您的程序只有能運行出正確結果的時候才有機會得分!
???
??? 在評卷時使用的輸入數(shù)據與試卷中給出的實例數(shù)據可能是不同的。
?
??? 請把所有函數(shù)寫在同一個文件中,調試好后,存入與【考生文件夾】下對應題號的“解答.txt”中即可。
???
??? 相關的工程文件不要拷入。
???
??? 源代碼中不能能使用諸如繪圖、Win32API、中斷調用、硬件操作或與操作系統(tǒng)相關的API。
???
??? 允許使用STL類庫,但不能使用MFC或ATL等非ANSI c++標準的類庫。例如,不能使用CString類型(屬于MFC類庫)。
思路:
? 涉及簡單的概率論知識,四個人分兩兩比賽,有C_4_2÷2=3種情況(C_4_2即四個人中選兩個人為一組,剩下兩個人自動分為一組,但考慮到選甲乙和選丙丁是一樣的情況,因此要除以2)。這三種情況分別是甲對乙,甲對丙,甲對丁。最后要保證甲勝,即要甲在第一輪比賽的時候勝,然后在第二輪比賽也要取勝,計算概率的時候需要運用到概率論中的乘法法則。
? 對于題干需要的十萬次模擬,需要rand()產生十萬個從0到2的隨機數(shù),0,1,2分別對應那三種情況甲勝的概率,把概率加起來除以100000可以得出最終答案為0.076018。
? 補充一下rand函數(shù)的用法,隨機數(shù)發(fā)生器,頭文件是#include<stdlib.h>。
? 舉例:若要產生從0到9的隨機數(shù),rand()%10即可,要是需要1~10的數(shù),可以rand()%10+1。本題需要0~2.就是rand()%3,非常好用~
<span style="font-size:14px;">#include<stdio.h> #include<stdlib.h> #include<string.h> int main() {double cas[3];memset(cas,0,sizeof(cas));//甲對乙,甲必須勝//丙對丁:丙勝,甲對丙,甲勝+丁勝,甲對丁,甲勝cas[0]=0.1*0.2*0.3+0.1*0.8*0.5;//甲對丙,甲必須勝//乙對丁:乙勝,甲對乙,甲勝+丁勝,甲對丁,甲勝cas[1]=0.3*0.4*0.1+0.3*0.6*0.5;//甲對丁,甲必須勝//乙對丙:乙勝,甲對乙,甲勝+丙勝,甲對丙,甲勝cas[2]=0.5*0.7*0.1+0.5*0.3*0.3;//下面進行十萬次模擬int i,t;double sum=0.0;for(i =0; i<100000; i++){t=rand()%3;if(t==0)sum+=cas[0];if(t==1)sum+=cas[1];if(t==2)sum+=cas[2];}printf("%lf\n",sum/100000);return 0; } </span>總結
以上是生活随笔為你收集整理的第三届蓝桥杯C/C++组第九题 足球比赛(概率论+随机数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysqljdbc设置参数
- 下一篇: 联想关闭计算机,如何关闭Lenovo计算