您的位置:首页 > 其它

Uva 340 - Master-Mind Hints

2016-07-28 09:16 393 查看
原文网址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=829&page=show_problem&problem=276
给出一个正确的序列,每次给出一个猜测序列,问在猜测的序列中,多少数字的位置是正确的(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: