这道题真的是挺水的,很简单啦,不过既然写了,我还是贴上我的代码吧
题目大意是这样的
Master-Mind是一种2个人的游戏。 其实就是学生常玩的几A几B的游戏(规则或许有些许不同)。 其中一个人担任出题者,他选一串1到9数字 当作密码(可以重复)。 另一个人为解题者,他要去猜密码为何。 解题者每次猜测后,出题者以某种格式回答他这次猜的结果。 在游戏开始之前,双方先协议密码的长度,假设是n。 在出题者设定密码(s1,s2,...sn) 后,由解题者来猜(g1,g2,...gn)。 如 果同样位置gi=si, 那解题者得到一个A。 如果gi=sj,但i不等于j,那解题者得到一个B。 请注意:不管是得A或得B,每个 gi最多只能对应到一个sj,而且得A比得B优先。 举例说明:密码为1 2 3 4,若猜题者猜1 1 5 6,那出题者应该回答1A0B,而不是0A1B。 如果某个猜测得到 nA0B,那就代表猜题者完全猜中密码了。
下面是代码写的可能复杂些,我没优化,今天做得太多了,累的要命,就不再优化了
View Code
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int x, y, n, i, k = 1, code[1020], _code[1020], j, code1[1020]; 6 while(scanf("%d",&n) && n) 7 { 8 for(i = 0;i < n; i++) 9 { 10 scanf("%d",&code[i]); 11 code1[i] = code[i]; 12 } 13 int flag = 0; 14 for(i = 0;i < n; i++) 15 { 16 scanf("%d",&_code[i]); 17 if(_code[i] != 0) 18 flag = 1; 19 } 20 printf("Game %d:\n",k++); 21 while(flag) 22 { 23 x = 0; 24 y = 0; 25 for(i = 0;i < n; i++) 26 if(code[i] == _code[i]) 27 { 28 x++; 29 _code[i] = code[i] = 0; 30 } 31 for(i = 0;i < n; i++) 32 { 33 for(j = 0;j < n; j++) 34 { 35 if((code[i] == _code[j]) && _code[j]) 36 { 37 _code[j] = code[i] = 0; 38 y++; 39 break; 40 } 41 } 42 } 43 for(i = 0;i < n;i++) 44 code[i] = code1[i]; 45 printf(" (%d,%d)\n",x,y); 46 flag = 0; 47 for(i = 0;i < n; i++) 48 { 49 scanf("%d",&_code[i]); 50 if(_code[i] != 0) 51 flag = 1; 52 } 53 } 54 } 55 return 0; 56 }