题目:http://acm.hdu.edu.cn/showproblem.php?pid=1172
代码:
#include<stdio.h> #include<string.h> using namespace std; int t; int ans1[5]; int ans2[5]; int a[105],b[105],c[105]; int judge1(int x,int i) //b { // x,a[i]; //printf("%d %d\n",x,i); int u=0; int o=x; while(o) { ans1[u]=o%10; u++; o=o/10; } u=0; int t=a[i]; while(t) { ans2[u]=t%10; u++; t=t/10; } int temp=0; for(int i=0; i<4; i++) { if(ans1[i]==ans2[i]) temp++; } //printf("%d %d\n",temp,c[i]); if(temp==c[i]) return 1; else return 0; } int judge2(int x,int i) //c { //printf("%d %d\n",x,i); int u=0; int o=x; while(o) { ans1[u]=o%10; u++; o=o/10; } u=0; int t=a[i]; while(t) { ans2[u]=t%10; u++; t=t/10; } int temp=0; //printf("%d%d%d%d %d%d%d%d\n",ans1[0],ans1[1],ans1[2],ans1[3],ans2[0],ans2[1],ans2[2],ans2[3]); //反的。 int book[5]={0}; for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { if(ans1[i]==ans2[j]&&book[j]==0) { //printf("i=%d j=%d ",i,j); book[j]=1; temp++; break; } } } //printf("%d b[i]=%d\n",temp,b[i]); if(temp==b[i]) return 1; else return 0; } int judge(int x) { //printf("%d\n",x); int k=0; for(int i=0; i<t; i++) { if(judge1(x,i)&&judge2(x,i)) { //printf("i=%d\n",i); k++; } } //printf("k=%d t=%d\n",k,t); if(k==t) return 1; else return 0; } int main() { while(~scanf("%d",&t)) { if(t==0) return 0; for(int i=0; i<t; i++) { scanf("%d%d%d",&a[i],&b[i],&c[i]); } int yy=0; int flag=0; int ans; for(int i=1000; i<=9999; i++) { if(judge(i)) { yy++; ans=i; } if(yy>=2) { flag=1; break; } } if(flag) printf("Not sure\n"); else printf("%d\n",ans); } }
大神告诉直接从1000模拟到9999,稀里糊涂直接A。
但打的时候废了好长时间。