题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1172
思路:一开始看这道题的时候觉得没什么思路。。。暴搜吗????然后仔细分析了一下,觉得不行。。。然后网上搜了一下。。。orz。。。枚举啊!!!把最基本的给忽略了。。。好吧,就是枚举1000-9999之间的数,然后把每个数都与给定的几个数以及条件进行比较,如果都符合,那么就记录个数。。。最后,看有多少个数满足条件。。。题目的意思是说只有一个数满足条件。。。
View Code
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 const int MAXN=100; 7 struct Node{ 8 int a,b,c; 9 }node[MAXN]; 10 11 bool Judge(int k,int number){ 12 int num1[5],num2[5]; 13 bool mark[5]; 14 for(int i=1;i<=4;i++)mark[i]=false; 15 16 num1[1]=node[k].a/1000; 17 num1[2]=(node[k].a%1000)/100; 18 num1[3]=(node[k].a%100)/10; 19 num1[4]=(node[k].a%10); 20 21 num2[1]=number/1000; 22 num2[2]=(number%1000)/100; 23 num2[3]=(number%100)/10; 24 num2[4]=(number%10); 25 26 int count=0; 27 for(int i=1;i<=4;i++){ 28 if(num1[i]==num2[i])count++; 29 } 30 if(count!=node[k].c)return false; 31 32 count=0; 33 for(int i=1;i<=4;i++){ 34 for(int j=1;j<=4;j++){ 35 if(num1[i]==num2[j]&&!mark[j]){ 36 mark[j]=true; 37 count++; 38 break; 39 } 40 } 41 } 42 if(count!=node[k].b)return false; 43 44 return true; 45 } 46 47 48 49 int main(){ 50 int n; 51 while(~scanf("%d",&n)&&n){ 52 for(int i=1;i<=n;i++){ 53 scanf("%d%d%d",&node[i].a,&node[i].b,&node[i].c); 54 } 55 int count=0,result; 56 bool flag=true; 57 for(int num=1000;num<=9999;num++){ 58 for(int i=1;i<=n;i++){ 59 flag=Judge(i,num); 60 if(!flag)break; 61 } 62 if(flag){ 63 count++; 64 result=num; 65 } 66 } 67 if(count==1){ 68 printf("%d\n",result); 69 }else 70 printf("Not sure\n"); 71 } 72 return 0; 73 }