小明参加一个比赛,规则是:每组卡牌有十张且点数为 1 到 10,现有 n 组卡牌,选手要在 n 组卡牌中,每组抽取一张,共抽 n 张;若 n 张卡牌的总点数大于 k 则小明获胜,求小明获胜的概率有多大? 输入 两个整数 n,k。 输出 获胜的概率,用真分数表示;如果概率为 0,则直接输出 0 即可;如果概率为 100%,则直接输出 1。c++
时间: 2024-02-11 16:08:21 浏览: 126
以下是 C++ 的代码实现:
```c++
#include <iostream>
using namespace std;
const int MAXN = 11;
int n, k, a[MAXN], cnt = 0, sum = 0;
void dfs(int x) {
if (x > n) {
if (sum > k) cnt++;
return;
}
for (int i = 1; i <= 10; i++) {
a[x] = i;
sum += i;
dfs(x + 1);
sum -= i;
}
}
int main() {
cin >> n >> k;
dfs(1);
if (cnt == 0) cout << "0" << endl;
else if (cnt == 10 * n) cout << "1" << endl;
else {
int g = __gcd(cnt, 10 * n);
cout << cnt / g << "/" << 10 * n / g << endl;
}
return 0;
}
```
思路解析:
首先使用 dfs 枚举每组卡牌选择的情况,并计算选择的卡牌点数之和。如果点数之和大于 k,则获胜次数加一。
最后,根据获胜次数 cnt 和总次数 10 * n 计算概率并化简输出。需要注意的是,当概率为 0 或 100% 时需要特判输出。
阅读全文