蓝桥杯 谁干的好事? 暴力

问题描述
  ABCDE中num个人做了好事,truth个人说真话。
  A说:“我和X中有且只有一个做了好事”
  B说:“C和E中有人做了好事”
  C说:“我和D和A中有人做了好事”
  D说:“B和C都没有做好事”
  E说:“我没有做好事”
  请问有哪些人做了好事?
  多组方案请一行一个输出。
输入格式
  仅一行,先是一个整数num,接着是一个A~E的字符X,最后是一个整数truth。意义见题面。
输出格式
  每行输出一组方案,方案中按 字母序 输出做好事的人的代号(A~E),不要空格隔开。
  如果没有合法方案,输出一行一个0即可。
样例输入
1 E 2
样例输出
0
样例输入
2 E 2
样例输出
BD
BE
数据规模和约定
  规定,1 <= num <= 2。
参考自https://blog.csdn.net/weixin_45276914/article/details/104772434,思路很清晰。
就是假定num=1时,枚举说真话的是A或B或C或D或E,得出对应的truth等于多少。
再假定num=2时,枚举说真话的是AB或AC或AD或AE或BC或BD或BE或CD或CE或DE时,得出对应的truth等于多少。
最后得出一张表,根据表值写if判断,原贴疑似笔误将num=2,说真话的是AE时的情况写错了,当X为E时为3,否则应为4。
本题不涉及算法知识,完全的手算所有情况,演草纸写三张,浪费时间,不过锻炼思维逻辑。
  1 #include <bits/stdc++.h>
  2 using namespace std; 
  3 int main() {
  4     int num, truth;
  5     string op;
  6     cin >> num >> op >> truth;
  7     vector<string> v;
  8     if (num == 1) {
  9         if (truth == 1) {
 10             if (op != "B") {
 11                 v.push_back("B");
 12             }
 13         }
 14         if (truth == 2) {
 15             if (op == "B") {
 16                 v.push_back("B");
 17             } 
 18             if (op != "E") {
 19                 v.push_back("E");
 20             }
 21         }
 22         if (truth == 3) {
 23             if (op != "C") {
 24                 v.push_back("C");
 25             } 
 26             if (op != "D") {
 27                 v.push_back("D");
 28             } 
 29             if (op == "E") {
 30                 v.push_back("E");
 31             }
 32         }
 33         if (truth == 4) {
 34             v.push_back("A");
 35             if (op == "C") {
 36                 v.push_back("C");
 37             } 
 38             if (op == "D") {
 39                 v.push_back("D");
 40             }
 41         }
 42     }
 43     if (num == 2) {
 44         if (truth == 1) {
 45             if (op != "B" && op != "E") {
 46                 v.push_back("BE");
 47             }
 48         }
 49         if (truth == 2) {
 50              if (op == "B") {
 51               v.push_back("AB");
 52              }  
 53              if (op != "B" && op != "D") {
 54                 v.push_back("BD");
 55              } 
 56              if (op == "B" ||op == "E") {
 57                 v.push_back("BE");
 58              } 
 59              if ((op != "E") && (op != "C")) {
 60                 v.push_back("CE");
 61              }
 62         }
 63         if (truth == 3) {
 64             if (op == "E") {
 65                 v.push_back("AE");
 66             } 
 67             if (op != "B") {
 68                 v.push_back("AB");
 69             } 
 70             if (op == "C") {
 71                 v.push_back("AC");
 72             }
 73             if (op == "D") {
 74                 v.push_back("AD");
 75             }
 76             if (op != "B" && op != "C") {
 77                 v.push_back("BC");
 78             } 
 79             if (op == "B" || op == "D") {
 80                 v.push_back("BD");
 81             } 
 82             if (op != "D" && op != "C") {
 83                 v.push_back("CD");
 84             } 
 85             if (op == "C" || op == "E") {
 86                 v.push_back("CE");
 87             } 
 88             if (op != "D" && op != "E") {
 89                 v.push_back("DE");
 90             }
 91         }
 92         if (truth == 4) {
 93             if (op != "C") {
 94                 v.push_back("AC");
 95             } 
 96             if (op != "D") {
 97                 v.push_back("AD");
 98             } 
 99             if (op != "E") {
100                 v.push_back("AE");
101             } 
102             if (op == "B" || op == "C") {
103                 v.push_back("BC");
104             } 
105             if (op == "C" || "D") {
106                 v.push_back("CD");
107             }
108             if (op == "C" || op == "E") {
109                 v.push_back("DE");
110             }
111         }
112     }
113     if (v.size() == 0) {
114         cout << 0 << endl;
115     }
116     for (int i = 0; i < v.size(); i++) {
117         cout << v[i] << endl;
118     }
119     return 0;
120 }
原文地址:https://www.cnblogs.com/fx1998/p/12615786.html