您的位置:首页 > 其它

*UVa 340 Master-Mind Hints(例题3-4)

2016-12-04 00:22 260 查看
为什么要加星号?因为这道题的算法和书上大致上是差不多的,不一样的地方是我把输入数组换成读入的时候统计而已

但是在oj上一直通不过,这我就很懵逼了,也不想把书上的代码打一遍,反正基本上差不多,自己对照一下书上吧

至于为什么是取最小的一个?应该是“同时出现”,所以取比较小的数据相加得到数字的贡献

PS:如果发现代码有哪里出现问题请在评论里联系我,谢谢,因为我自己也不知道哪里的问题,oj上的测试数据也都可以过,我已经纠结了两天

放代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[11],b[11],c[11],cnt=0,tmp;
int main()
{
while((scanf("%d",&n))==1&&n)
{
memset(a,0,sizeof(c));
memset(b,0,sizeof(b));
printf("Game %d:\n", ++cnt);
for(int i = 0;i<n;i++)
{
cin>>a[i];
b[a[i]]++;
}
for(;;)
{
memset(c,0,sizeof(c));
int sign = 1;
int x=0,y=0,c1=0,c2=0;
for(int i = 0;i<n;i++)
{
cin>>tmp;
if(tmp==0){sign = 0;}
for(int j = 0;j<n;j++)
if(a[j]==tmp&&i==j) x++;
c[tmp]++;
}
for(int i = 1;i<=9;i++)
y+=min(b[i],c[i]);
if(!sign) break;
printf(" (%d,%d)\n", x,y-x);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: