标签:str algorithm content sam strong 表示 输出 http 输入数据
http://acm.hdu.edu.cn/showproblem.php?pid=1172
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
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 7 const int N = 110; 8 struct Arr{ 9 int a,b,c; 10 }arr[N]; 11 int hashA[N],hashB[N]; 12 bool judge(int y,int n) 13 { 14 memset(hashA,0,sizeof(hashA)); //初始化数组hashA 15 int A1,B1,C1,D1,A2,B2,C2,D2; 16 A1 = y % 10; hashA[A1]++; //个位 17 B1 = y / 10 % 10; hashA[B1]++; //十位 18 C1 = y / 100 % 10; hashA[C1]++; //百位 19 D1 = y / 1000 % 10; hashA[D1]++; //千位 20 for(int i = 0;i < n ; i++) //判断键盘输入的 n 个数 21 { 22 memset(hashB,0,sizeof(hashB)); //初始化数组hashB 23 int x = arr[i].a; 24 A2 = x % 10; hashB[A2]++; 25 B2 = x / 10 % 10; hashB[B2]++; 26 C2 = x / 100 % 10; hashB[C2]++; 27 D2 = x / 1000 % 10; hashB[D2]++; 28 int cnt1 = 0, cnt2 = 0; //cnt1记录在正确位置上的正确的个数 29 if(A1 == A2) cnt1++; 30 if(B1 == B2) cnt1++; 31 if(C1 == C2) cnt1++; 32 if(D1 == D2) cnt1++; 33 if(cnt1 != arr[i].c) return false; 34 for(int q = 0; q < 10; q++) cnt2 += min(hashA[q],hashB[q]); //单个数字个数介于 0 ~ 10 35 if(cnt2 != arr[i].b) return false; 36 } 37 return true; 38 } 39 40 int main() 41 { 42 int n; 43 while(~scanf("%d",&n) && n) 44 { 45 for(int i = 0; i < n;i++) //输入 n 组数据 46 scanf("%d %d %d",&arr[i].a,&arr[i].b,&arr[i].c); //输入的数,猜对 B个数,C个在正确位置上 47 int ans = -1; 48 for(int i = 1000; i < 9999; i++) 49 { 50 if(judge(i,n)) 51 { 52 if(ans != -1) { ans = 0;break; } //第二次匹配,结束匹配 53 ans = i; //第一次匹配成功,继续匹配下一个数 54 } 55 } 56 if(!ans) printf("Not sure\n"); 57 else printf("%d\n",ans); 58 } 59 return 0; 60 }
标签:str algorithm content sam strong 表示 输出 http 输入数据
原文地址:https://www.cnblogs.com/Edviv/p/11441226.html