hdu1172猜数字(暴力枚举)
猜数字
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3373 Accepted Submission(s): 1975
Problem Description
猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比 如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告 诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
比 如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告 诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
Input
输
入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数
A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。
Output
每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。
Sample Input
6
4815 2 1
5716 1 0
7842 1 0
4901 0 0
8585 3 3
8555 3 2
2
4815 0 0
2999 3 3
0
Sample Output
3585
Not sure
知识点:暴力枚举
难点:判断计算机回答猜对了B个数字用到标记数组。
1 #include<cstdlib> 2 #include<cstdio> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 int d[5],e[5],vis[5]; 8 int t,cnt1,cnt2,cnt3,temp; 9 struct Num 10 { 11 int a,b,c; 12 }; 13 Num num[120]; 14 bool judge(int n,Num k) 15 { 16 memset(vis,0,sizeof(vis)); 17 d[0]=n/1000; 18 d[1]=n/100%10; 19 d[2]=n%100/10; 20 d[3]=n%10; 21 e[0]=k.a/1000; 22 e[1]=k.a/100%10; 23 e[2]=k.a%100/10; 24 e[3]=k.a%10; 25 for(int i=0;i<4;i++) 26 if(e[i]==d[i]) 27 cnt1++; 28 if(cnt1==k.c) 29 { 30 for(int i=0;i<4;i++) 31 { 32 for(int j=0;j<4;j++) 33 if(d[i]==e[j]&&!vis[j]) 34 { 35 vis[j]=1; 36 cnt2++; 37 break; 38 } 39 } 40 } 41 else 42 return false; 43 if(cnt2==k.b) 44 return true; 45 else 46 return false; 47 } 48 int main() 49 { 50 while(~scanf("%d",&t)) 51 { 52 if(t==0) 53 break; 54 for(int i=0;i<t;i++) 55 scanf("%d%d%d",&num[i].a,&num[i].b,&num[i].c); 56 cnt3=0; 57 //int flag=0; 58 bool flag=true; 59 for(int i=1000;i<=9999;i++) 60 { 61 for(int j=0;j<t;j++) 62 { 63 cnt1=cnt2=0; 64 flag=judge(i,num[j]); 65 if(!flag)break; 66 } 67 if(flag) 68 { 69 cnt3++; 70 temp=i; 71 } 72 } 73 if(cnt3!=1) 74 { 75 printf("Not sure\n"); 76 } 77 else 78 printf("%d\n",temp); 79 80 } 81 82 return 0; 83 } 84 /*6 85 4815 2 1 86 5716 1 0 87 7842 1 0 88 4901 0 0 89 8585 3 3 90 8555 3 2 91 2 92 4815 0 0 93 2999 3 3 94 0*/