6 4815 2 1 5716 1 0 7842 1 0 4901 0 0 8585 3 3 8555 3 2 2 4815 0 0 2999 3 3 0
3585 Not sure
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <algorithm> #include <cmath> #define N 200 using namespace std; int n; struct Node { int a,b,c; }f[N]; int num1[N]; int num2[N]; int vis[N]; int check(int i,int num) { memset(vis,0,sizeof vis); num1[0]=f[i].a/1000; num1[1]=f[i].a%1000/100; num1[2]=f[i].a%100/10; num1[3]=f[i].a%10; num2[0]=num/1000; num2[1]=num%1000/100; num2[2]=num%100/10; num2[3]=num%10; int cnt=0; for(int k=0;k<4;k++) { if(num1[k]==num2[k]) cnt++; } if(cnt!=f[i].c) return 0; cnt=0; for(int k=0;k<4;k++) for(int j=0;j<4;j++) { if(num1[k]==num2[j]&&!vis[j]) { cnt++; vis[j]=1; break; } } if(cnt!=f[i].b) return 0; return 1; } int main() { while(scanf("%d",&n),n) { for(int i=1;i<=n;i++) scanf("%d%d%d",&f[i].a,&f[i].b,&f[i].c); int flag; int ans=0; int cnt=0; for(int i=1000;i<=9999;i++) { for(int j=1;j<=n;j++) { flag=check(j,i); if(flag==0) break; } if(flag) { ans=i; cnt++; } } if(cnt==1) cout<<ans<<endl; else cout<<"Not sure"<<endl; } return 0; }