1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<fstream> 6 #include<algorithm> 7 #define MAXN 105 8 using namespace std; 9 typedef struct{ 10 int num[10], a, b; 11 char str[10]; 12 void Switch(){ 13 for(int i = 0; i < 4; i ++) 14 num[i] = str[i]-‘0‘; 15 } 16 }Gusse; 17 Gusse gg[MAXN]; 18 int ans[10], target[10], flag, N; 19 bool Is_In_num(int i){ 20 int num1[10], num2[10], cnt = 0; 21 memset(num1, 0, sizeof(num1)); 22 memset(num2, 0, sizeof(num2)); 23 for(int j = 0; j < 4; j ++) num1[ans[j]]++; 24 for(int j = 0; j < 4; j ++) num2[gg[i].num[j]]++; 25 for(int j = 0; j < 10;j ++) if(num1[j] && num2[j]) cnt += min(num1[j], num2[j]); 26 return cnt == gg[i].a; 27 } 28 bool Is_Ok_num(int i){ 29 int cnt = 0; 30 for(int j = 0; j < 4; j ++) 31 if(ans[j] == gg[i].num[j]) cnt++; 32 return cnt == gg[i].b; 33 } 34 bool OK(){ 35 for(int i = 0; i < N; i ++) 36 if(!Is_In_num(i) || !Is_Ok_num(i)) return false; 37 return true; 38 } 39 void dfs(int cnt){ 40 if(cnt == 4){ 41 if(OK()){ 42 flag++; 43 for(int i = 0; i < 4; i ++) target[i] = ans[i]; 44 } 45 return ; 46 } 47 for(int i = 0; i < 10; i ++){ 48 if((cnt + i)){ 49 ans[cnt] = i; 50 dfs(cnt+1); 51 } 52 } 53 } 54 int main(){ 55 freopen("in.c", "r", stdin); 56 while(~scanf("%d", &N) && N){ 57 for(int i = 0; i < N; i ++){ 58 scanf("%s%d%d", gg[i].str, &gg[i].a, &gg[i].b); 59 gg[i].Switch(); 60 } 61 flag = 0; 62 dfs(0); 63 if(flag != 1) printf("Not sure\n"); 64 else{ 65 for(int i = 0; i < 3; i ++) printf("%d", target[i]); 66 printf("%d\n", target[3]); 67 } 68 } 69 return 0; 70 }
原文:http://www.cnblogs.com/anhuizhiye/p/3673275.html