题目: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。
但打的时候废了好长时间。