刚开始方法用复杂了,WA了。
后来直接暴力从1000-9999,一次,比较,求出相同数字的个数个位置正确的数目;
注意遍历完,求出满足所有的数字的个数,如果为1说明可以确定,否则不可以。
#include"stdio.h"
#include"string.h"
#define N 101
struct node
{
int z,x,y;
}A[N];
int n;
int c1,c2;
void judge(int n,int m)
{
int i,nn,mm;
int a[10],b[10];
nn=n;mm=m;
c1=c2=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
while(n)
{
a[n%10]++;
b[m%10]++;
if(n%10==m%10)c2++;
n/=10;
m/=10;
}
for(i=0;i<10;i++)
c1+=a[i]<b[i]?a[i]:b[i];
}
int main()
{
int i,j,t,m,cnt;
while(scanf("%d",&n)!=-1&&n)
{
for(i=0;i<n;i++)
scanf("%d%d%d",&A[i].x,&A[i].y,&A[i].z);
cnt=0;
for(i=1000;i<=9999;i++)
{
t=0;
for(j=0;j<n;j++)
{
judge(i,A[j].x);
if(c1==A[j].y&&c2==A[j].z)t++;
else break;
}
if(cnt==0&&t==n)m=i;
if(t==n)cnt++;
}
if(cnt==1)printf("%d\n",m);
else printf("Not sure\n");
}
return 0;
}