https://vjudge.net/problem/UVA-340
N 表示 密码的个数
第一行是正确的密码
下面的行直到N个0之前,都是猜测的序列,输出的括号(A,B)
A表示对应位置与密码相符合的个数,B表示出现在序列中的数字但是位置不对
另设一个C表示 两个序列中都出现的数字的个数(那么C只有两种情况,一个就是在对应位置上(即A),另一种就是不在对应位置上(即B)) C = A + B
输出的括号就可以转换成 (A,C - A)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int a[1010];
int b[1010];
int main ()
{
int i,j,N,cnt = 0;
while(scanf("%d",&N)!=EOF && N)
{
printf("Game %d:\n",++cnt);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
while(1)
{
int A = 0;
for(i=0;i<N;i++)
{
scanf("%d",&b[i]);
if(b[i] == a[i])
A++;
}
if(b[0] == 0)
break;
int C1,C2;
int C = 0;
for(i=1;i<=9;i++)
{
C1 = 0;
C2 = 0;
for(j=0;j<N;j++)
{
if(a[j]==i)
C1++;
if(b[j]==i)
C2++;
}
if(C1>C2)
C += C2;
else
C += C1;
}
printf(" (%d,%d)\n",A,C-A);
}
}
return 0;
}