题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1172
题目大意:
计算机随机产生一个四位数,然后玩家去猜这个四位数,每次猜测,计算机都会告诉
你猜对了几个数字,有几个数字在正确的位置上。现在给你N组猜测的结果,那么问
题来了:能否根据这几组猜测的结果去确定这个四位数是多少。如果能确定,输出这
个四位数。如果不能确定,输出:"Not sure"。
思路:
只是四位数的话,暴力枚举就可以了。找到满足这几组猜测结果的四位数。如果只有
1个,就输出这个数。如果是0个或是多于1个,就输出:"Not sure"。
AC代码:
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; struct Node { int A,B,C; }P[110]; int main() { int N; while(cin >> N && N) { for(int i = 0; i < N; ++i) cin >> P[i].A >> P[i].B >> P[i].C; int a[4],b[4],vis[4]; int Num,Pos,Count = 0,ans; for(int i = 1000; i <= 9999; ++i) { int flag = 1; for(int l = 0; l < N; ++l) { for(int j = 0; j < 4; ++j) vis[j] = 0; a[0] = P[l].A%10; a[1] = P[l].A/10%10; a[2] = P[l].A/100%10; a[3] = P[l].A/1000; b[0] = i%10; b[1] = i/10%10; b[2] = i/100%10; b[3] = i/1000; Pos = 0; for(int j = 0; j < 4; ++j) if(a[j] == b[j]) Pos++; if(Pos != P[l].C) { flag = 0; break; } Num = 0; for(int j = 0; j < 4; ++j) { for(int k = 0; k < 4; ++k) { if(a[j] == b[k] && !vis[k]) { Num++; vis[k] = 1; break; } } } if(Num != P[l].B) { flag = 0; break; } } if(flag) { Count++; ans = i; } } if(Count == 1) cout << ans << endl; else cout << "Not sure" << endl; } return 0; }