解题思路:
妥妥的贝叶斯公式套一套即可得出答案,不过要先算出在所有故障发生的情况下对应故障原因所发生的概率是多少,可以通过给出的发生了故障的情况去计算,若某个故障现象发生了,那么直接用输入的概率即可,若没发生则使用相反概率(即用1减去)即可。
其他的就看公式自己套一套就行。
参考代码:
#include <bits/stdc++.h> #define ld long double using namespace std; const int N = 45, M = 25; int n, m, k; int p[N], pp[N][M]; pair<ld, int> ppp[N]; bool happen[M]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> p[i]; for (int i = 1; i <= n; i++) { ppp[i].second = i; for (int j = 1; j <= m; j++) { cin >> pp[i][j]; } } cin >> k; for (int i = 0, x; i < k; i++) { cin >> x; happen[x] = true; } ld s = 0; for (int i = 1; i <= n; i++) { ld &x = ppp[i].first; x = p[i] / 100.0; for (int j = 1; j <= m; j++) { if (happen[j]) x *= pp[i][j] / 100.0; else x *= (100 - pp[i][j]) / 100.0; } s += x; } sort(ppp + 1, ppp + n + 1, [&](pair<ld, int> a, pair<ld, int> b) { if (a.first == b.first) return a.second < b.second; return a.first > b.first; }); for (int i = 1; i <= n; i++) { printf("%d %.2Lf\n", ppp[i].second, !s ? 0.0 : ppp[i].first * 100 / s); } return 0; }
0.0分
0 人评分
The 3n + 1 problem (C语言代码)浏览:776 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:778 |
点我有惊喜!你懂得!浏览:1705 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:1026 |
Biggest Number (C++代码)回溯法浏览:1679 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:643 |
C二级辅导-阶乘数列 (C语言代码)浏览:736 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |