当前位置: 代码迷 >> 综合 >> ZCMU 1053: Master-Mind Hints
  详细解决方案

ZCMU 1053: Master-Mind Hints

热度:96   发布时间:2023-12-18 20:48:57.0

【解析】
最头痛英语题不为别的,虽然阅读理解稍微好一点..不过这个嘛题目读着完全不是阅读理解嘛。其实题目的意思就是
先给你一个序列,然后再给你一个序列叫你进行匹配比如说样例1,先给你一个1 3 5 5,后面再给你1 1 2 3.叫你统
计a[i]=b[i]的有几个注意这里必须是相同位置,后面叫你统计的是出现在不同的位置相同的数有几个,a[i]=b[j]当
然了前面已 经统计过的相同位置的不算在内的,然后再按照格式输出,样例1当中的其中一个例子就是我上面说的,1
这个位置是 相同的所以x坐标是1,不同位置相同的就只有一个3,所以y也是3,当输入的序列都是0的时候我们就跳出
循环,不然 是一直循环输入b序列的。
#include<stdio.h>
#include<string.h>
int guess[1000],code[1000],gd[10],cd[10];
int main()
{
int t,now=0;
while(scanf("%d",&t)!=EOF)
{
if(t==0)
break;
int i;
printf("Game %d:\n",++now);
for(i=0;i<t;i++)
scanf("%d",&code[i]);
for(;;)
{
memset(cd,0,sizeof(cd));
memset(gd,0,sizeof(gd));
int A=0,B=0;
for(i=0;i<t;i++)
scanf("%d",&guess[i]);
int flag=1;
for(i=0;i<t;i++)
{
if(guess[i]!=0)
{
flag=0;
break;
}
}
if(flag==1)
break;
for(i=0;i<t;i++)
{
if(guess[i]==code[i])
A++;
else
{
gd[guess[i]]++;
cd[code[i]]++;
}
}
for(i=0;i<=9;i++)
{
if(gd[i]<cd[i])
B+=gd[i];
else
B+=cd[i];
}
printf(" (%d,%d)\n",A,B);
}
}
return 0;
}


  相关解决方案