一、常考题型
1、客观题(选择题);
2、古典概率、期望的计算,不涉及高等概率和微积分;
3、利用随机来改进著名的算法(快速排序);
4、随机数发生器(根据给定的随机数发生器构造另一个)。
二、练习题
1、
有2k只球队,有k-1个强队,其余都是弱队,随机把它们分成k组比赛,每组两个队,问两强相遇的概率是多大?结果化成最简分数。
解法:该题的难点有两点:
①总组队方法数的计算。用C(2k,2)C(2(k-1),2)……C(2,2)计算是错误的
,因为这样把选取其中任意两队为一组重复计数了k次,例如4支球队A,B,C,D,选AB,则CD自然为一组,若用C(4,2)计算,它把先选AB和先选CD算成了两种情况,实际上是同一种情况。所以应该是C(2k,2)C(2(k-1),2)……C(2,2)/k*(k-1)……2*1。
②最大公约数的计算。
class
Championship {
public
:
int
getGcd(
int
a,
int
b) {
// 辗转相除法计算最大公约数
if
(a ==
0
)
return
b;
if
(b ==
0
)
return
a;
int
temp;
while
(b !=
0
) {
temp = a % b;
a = b;
b = temp;
}
return
a;
}
vector<
int
> calc(
int
k) {
int
n1 =
1
,n2 =
1
;
vector<
int
> res;
for
(
int
i =
2
*k-
1
;i >=
3
;i = i-
2
)
n1 *= i;
n2 = (k+
1
)*k/
2
;
for
(
int
j = k-
1
;j >=
1
;j--)
n2 *= j;
n2 = n1-n2;
int
gcd = getGcd(n1,n2);
res.push_back(n2/gcd);
res.push_back(n1/gcd);