The title given time is very abundant, so the use of brute force.
Analyzing the sequence number 1000 to 9999 the number of all meet guess. If you happen to 1, the speculation success; otherwise it is impossible to guess.
#include <iostream>
#include <algorithm>
using namespace std;
const int BASE = 10;
const int MAXN = 100;
int A[MAXN], B[MAXN], C[MAXN]; //输入
int cnt1[BASE], cnt2[BASE]; //猜对数字的个数
//判断num是否满足第k次猜测
bool judge(int num, int k)
{
memset(cnt1, 0, sizeof(cnt1));
memset(cnt2, 0, sizeof(cnt2));
int cnt = 0; //对应位相同数字的个数
int guess = A[k]; //本次猜测的数
for (int i = 1; i <= 4; i++)
{
int r1 = num % BASE;
int r2 = guess % BASE;
if (r1 == r2) //对应位相同
++cnt;
num /= BASE;
guess /= BASE;
cnt1[r1]++;
cnt2[r2]++;
}
if (cnt == C[k])
{
int sum = 0; //猜对数字的个数
for (int i = 0; i < BASE; i++)
sum += min(cnt1[i], cnt2[i]);
return sum == B[k];
}
else
return false;
}
int main()
{
int N;
int ans, cnt; //最终答案,满足猜测的答案数
while (cin >> N)
{
if (N == 0)
break;
for (int i = 0; i < N; i++)
{
cin >> A[i] >> B[i] >> C[i];
}
ans = cnt = 0;
for (int num = 1000; num < 9999 && cnt < 2; num++)
{
int i;
for (i = 0; i < N; i++) //对num测试所有猜测
{
if (!judge(num, i))
break;
}
if (i == N) //num满足所有猜测
{
++cnt;
ans = num;
}
}
if (cnt == 1) //满足猜测的数的个数为1
cout << ans << endl;
else
cout << "Not sure" << endl;
}
return 0;
}
Keep up.