最近,网上热传一份2018年刑侦试题,这套题也是让大家开了眼界,原来题目还能这样出。看到这套试卷之后,我心血来潮,经过一番艰苦的逻辑推理,终于也得出了正确答案。但是,为什么要让我们的人脑做这么复杂的逻辑推理呢,这些事情交给计算机做不就好了吗。那么我们怎样利用计算机强大的计算能力暴力破解这套题呢?话不多说,直接上代码。(代码是从同学那复制来的)
#include <iostream> #include <vector> #include <algorithm> char ans[11] = {0, 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'}; bool check_ans() { // 第一题不用考虑 // 第二题 if (ans[2] == 'A' && ans[5] != 'C') { return false; } else if (ans[2] == 'B' && ans[5] != 'D') { return false; } else if (ans[2] == 'C' && ans[5] != 'A') { return false; } else if (ans[2] == 'D' && ans[5] != 'B') { return false; } // 第三题 if (ans[3] == 'A' && !(ans[3] != ans[6] && ans[2] == ans[6])) { return false; } else if (ans[3] == 'B' && !(ans[3] == ans[2] && ans[3] != ans[6])) { return false; } else if (ans[3] == 'C' && !(ans[3] == ans[6] && ans[2] != ans[6])) { return false; } else if (ans[3] == 'D' && !(ans[3] == ans[6] && ans[4] != ans[6])) { return false; } // 第四题 if (ans[4] == 'A' && ans[1] != ans[5]) { return false; } else if (ans[4] == 'B' && ans[2] != ans[7]) { return false; } else if (ans[4] == 'C' && ans[1] != ans[9]) { return false; } else if (ans[4] == 'D' && ans[6] != ans[10]) { return false; } // 第五题 if (ans[5] == 'A' && ans[5] != ans[8]) { return false; } else if (ans[5] == 'B' && ans[5] != ans[4]) { return false; } else if (ans[5] == 'C' && ans[5] != ans[9]) { return false; } else if (ans[5] == 'D' && ans[5] != ans[7]) { return false; } // 第六题 if (ans[6] == 'A' && !(ans[2] == ans[8] && ans[4] == ans[8])) { return false; } else if (ans[6] == 'B' && !(ans[1] == ans[8] && ans[6] == ans[8])) { return false; } else if (ans[6] == 'C' && !(ans[3] == ans[8] && ans[10] == ans[8])) { return false; } else if (ans[6] == 'D' && !(ans[5] == ans[8] && ans[9] == ans[8])) { return false; } // 第七题 int times[4] = {0,0,0,0}; for (int i = 1; i <= 10; ++i) { ++times[ans[i] - 'A']; } int min = 11; char least = 'A'; for (int i = 0; i < 4; ++i) { if (times[i] < min) { min = times[i]; least = 'A' + i; } } if (ans[7] == 'A' && least != 'C') { return false; } else if (ans[7] == 'B' && least != 'B') { return false; } else if (ans[7] == 'C' && least != 'A') { return false; } else if (ans[7] == 'D' && least != 'D') { return false; } // 第八题 // 不相邻这个666 if (ans[8] == 'A' && std::abs(ans[1] - ans[7]) == 1) { return false; } else if (ans[8] == 'B' && std::abs(ans[1] - ans[5]) == 1) { return false; } else if (ans[8] == 'C' && std::abs(ans[1] - ans[2]) == 1) { return false; } else if (ans[8] == 'D' && std::abs(ans[1] - ans[10]) == 1) { return false; } // 第九题 if (ans[9] == 'A' && ((ans[1] == ans[6]) == (ans[6] == ans[5]))) { return false; } else if (ans[9] == 'B' && ((ans[1] == ans[6]) == (ans[10] == ans[5]))) { return false; } else if (ans[9] == 'C' && ((ans[1] == ans[6]) == (ans[2] == ans[5]))) { return false; } else if (ans[9] == 'D' && ((ans[1] == ans[6]) == (ans[9] == ans[5]))) { return false; } // 第十题 times[0] = times[1] = times[2] = times[3] = 0; int max = -1; min = 11; for (int i = 1; i <= 10; ++i) { ++times[ans[i] - 'A']; } for (int i = 0; i < 4; ++i) { min = std::min(min, times[i]); max = std::max(max, times[i]); } if (ans[10] == 'A' && max - min != 3) { return false; } else if (ans[10] == 'B' && max - min != 2) { return false; } else if (ans[10] == 'C' && max - min != 4) { return false; } else if (ans[10] == 'D' && max - min != 1) { return false; } return true; } bool dfs(int index) { if (index == 11) { return check_ans(); } for (int i = 0; i < 4; ++i) { ans[index] = 'A' + i; if (dfs(index + 1)) { return true; } } return false; } int main() { dfs(1); std::cout << check_ans() << "\n"; for (int i = 1; i <= 10; ++i) { std::cout << i << ": " << ans[i] << "\n"; } return 0; }
0.0分
0 人评分
【回文数(二)】 (C语言代码)浏览:940 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:502 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:658 |
C语言训练-角谷猜想 (C语言代码)浏览:1768 |
哥德巴赫曾猜测 (C语言代码)浏览:1148 |
字符串问题 (C语言代码)浏览:1635 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:1000 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
A+B for Input-Output Practice (III) (C语言代码)浏览:594 |
DNA (C语言代码)浏览:440 |