解题思路:
妥妥的贝叶斯公式套一套即可得出答案,不过要先算出在所有故障发生的情况下对应故障原因所发生的概率是多少,可以通过给出的发生了故障的情况去计算,若某个故障现象发生了,那么直接用输入的概率即可,若没发生则使用相反概率(即用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 人评分
C二级辅导-计负均正 (C语言代码)浏览:658 |
蛇行矩阵 (C语言代码)浏览:536 |
陈教主的三角形 (C语言代码)浏览:1143 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:548 |
1162答案错误,为什么浏览:644 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:840 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:512 |
母牛的故事 (C语言代码)浏览:455 |
众数问题 (C语言代码)浏览:630 |
C语言训练-最大数问题 (C语言代码)浏览:591 |