思路: 正面求解过于繁琐.. 想到4位数只有不到10^4个数字,对话数最大只有100,即采用枚举。对每个4位数进行N次判断。如果有且仅有一个数,符合每一个对话,这个数即有可能是求解数。
#include <algorithm> #include <cstdio> #include <cstring> #include <iostream> #include <string> #include <vector> using namespace std; int n; int num[101], b[101], c[101]; bool check(int j, int i) { int s[4], t[4], tnum = num[i], tb = b[i], tc = c[i]; for (int k = 3; k >= 0; --k) { s[k] = j % 10; j /= 10; t[k] = tnum % 10; tnum /= 10; } int corPos = 0, corNum = 0; for (int k = 0; k < 4; ++k) if (s[k] == t[k]) ++corPos; for (int k = 0; k < 4; ++k) for (int l = 0; l < 4; ++l) if (s[k] == t[l]) { ++corNum; t[l] = -1; break; } return corNum == tb && corPos == tc; } int main() { while (cin >> n, n) { int i, j, target, count = 0; for (i = 0; i < n; ++i) { cin >> num[i] >> b[i] >> c[i]; } for (j = 3584; j < 3586 && count < 2; ++j) { for (i = 0; i < n; ++i) if (!check(j, i)) break; if (i == n) ++count; target = j; } if (count != 1) cout << "Not sure" << endl; else cout << target << endl; } system("pause"); return 0; }转载于:https://www.cnblogs.com/ruoh3kou/p/9893459.html
相关资源:用c语言实现设计一个猜数字的游戏,由计算机随机产生一个1-200之间的数,游戏开始后你从键盘输入一个1-300之间的数,如果你猜中了计算机会告诉你猜中了,给出对你的评论,并告诉你你所用的时间。如果你没有猜中则会提示你,你输入的数是大了还是小了,直到你猜中为止。