hdu 1172 猜数字

来源:互联网 发布:成都外包seo 编辑:程序博客网 时间:2024/06/05 16:42

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1172

依照题意暴力枚举。

#include<cstdio>#include<cstring>using namespace std;struct node{int a,b,c;}num[101];int num1[5],num2[101];int mark[5];int main(){int n,ans,flag,m;while(scanf("%d",&n)&&n){for(int i=1;i<=n;i++)scanf("%d%d%d",&num[i].a,&num[i].b,&num[i].c);flag=m=0;for(int i=1000;i<=9999;i++){int count=0;flag=0;num2[4] = i%10;num2[3] = (i/10)%10;num2[2] = (i/100)%10;num2[1] = (i/1000);//枚举i,获得各位数 for(int l=1;l<=n;l++)//依次与输入的n个数比较,全部符合条件,则答案数量加一 {memset(mark,0,sizeof(mark));count=0;num1[4] = num[l].a%10;num1[3] = (num[l].a/10)%10;num1[2] = (num[l].a/100)%10;num1[1] = (num[l].a/1000);for(int j=1;j<=4;j++)if(num1[j]==num2[j]){count++;}if(count!=num[l].c){flag=1;break;}count = 0;for(int j=1;j<=4;j++)for(int k=1;k<=4;k++)if(num1[j]==num2[k]&&!mark[k]){count++;mark[k]=1;break;}if(count!=num[l].b){flag=1;break;}}if(flag)continue;//不符,继续枚举下一个数 else{m++;ans=i;}}if(m==1)//若答案唯一,则是唯一确定的,否则不能确定 printf("%d\n",ans);else printf("Not sure\n");}}

0 0