刚开始方法用复杂了,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; }