您的位置:首页 > 其它

hdu 1172 猜数字

2014-03-27 17:20 387 查看
直接枚举1000到9999,如果没有满足或者满足超过2个数字,则是not sure;

从3585枚举也可以过,原因是数据太弱;

感觉自己的代码有点乱,思路不清晰,缺少代码简化和优化!
#include<stdio.h>
#include<string.h>
struct un{
int t,x,y;
};
struct un z[100];

bool compare(int a,int b){
int p=0,q=0;
int num[10];
memset(num,0,sizeof(num));
int u=a,v=z[b].t;
for(int i=0;i<4;i++){
if(u%10==v%10)
q++;
num[u%10]++;
u/=10;
v/=10;
}
v=z[b].t;
for(int i=0;i<4;i++){
if(num[v%10]){
num[v%10]--;
p++;
}
v/=10;
}
if(p==z[b].x&&q==z[b].y)
return true;
return false;
}
int main(){
//freopen("hdu1172.in","r",stdin);
int n,i,j,k,cnt,ans;
while(scanf("%d",&n)!=EOF){
if(!n)
break;
cnt=0;
for(i=0;i<n;i++)
scanf("%d%d%d",&z[i].t,&z[i].x,&z[i].y);
for(i=1000;i<10000;i++){
k=1;
for(j=0;j<n;j++){
if(!compare(i,j)){
k=0;
break;
}
}
if(k)
ans=i;
cnt+=k;
if(cnt>1)
break;
}
if(cnt!=1)
printf("Not sure\n");
else
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: