原文网址:
给出一个正确的序列,每次给出一个猜测序列,问在猜测的序列中,多少数字的位置是正确的(A),有多少数字在正确的序列中出现过但是位置不对的(B)
题解:
先求A,直接遍历。对0-9的每一个数字,它在a中出现的次数和b中出现的次数 的最小值,就是这个数字在正确的序列中出现过的次数,这些最小值加起来也就是A+B,注意输出格式
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool scan(int n,int y[])
{
int kase=0;
for(int i=0;i<n;++i)
{
scanf("%d",&y[i]);
if(y[i])
{
kase=1;
}
}
return kase==1;
}
int main()
{
int n,kase=0;
while(scanf("%d",&n)==1,n)
{
int x[1005],y[1005],a[15]={0};
for(int i=0;i<n;++i)
{
scanf("%d",&x[i]);
++a[x[i]];
}
printf("Game %d:\n",++kase);
while(scan(n,y))
{
int A=0,B=0,b[15]={0};
for(int i=0;i<n;++i)
{
if(x[i]==y[i])
{
++A;
}
++b[y[i]];
}
for(int i=0;i<=9;++i)
{
B+=min(a[i],b[i]);
}
printf(" (%d,%d)\n",A,B-A);
}
}
return 0;
}