UVa 340 - Master-Mind Hints

两个串相同位置的相同字符得到A

相同字符但不同位置得到B。

A优先于B,同一字符只能算一次

求A,B数

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5 int a[1005],b[1005],c[1005],d[1005];
 6 int t,n,ans1,ans2;
 7 bool flag;
 8 int main(){
 9     t=1;
10     while(~scanf("%d",&n),n)
11     {
12         printf("Game %d:\n",t++);
13         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
14         while(1)
15         {
16             flag=1;
17             ans1=ans2=0;
18             for(int i=1;i<=n;i++)
19             {
20                 scanf("%d",&b[i]);
21                 if(b[i]) flag=0; 
22             }
23             if(flag) break;
24             memset(c,0,sizeof(c));
25             memset(d,0,sizeof(d));
26             for(int i=1;i<=n;i++)
27                 if(a[i]==b[i]) ans1++,d[i]=c[i]=1;
28             for(int i=1;i<=n;i++)
29                 if(!d[i])
30                     for(int j=1;j<=n;j++)
31                     {
32                         if(!c[j]&&a[j]==b[i])
33                         {
34                             ans2++; c[j]=d[i]=1; break;
35                         }
36                     }
37             printf("    (%d,%d)\n",ans1,ans2);
38         }
39     } return 0;
40 }

 

posted @ 2016-03-12 18:53  nicetomeetu  阅读(115)  评论(0编辑  收藏  举报