关键点在于求出现过但位置不对的元素个数
首先寻找出现过的元素个数
应该取答案组跟猜测组出现元素最少个数的和
然后减去位置正确元素个数即可。
#include <stdio.h>
#define maxn 1001
int a[maxn];
int b[maxn];
int main()
{
int n;
int k=0;
while(scanf("%d",&n)==1 && n){
int i;
printf("Game %d:\n",++k);
for(i=0; i<n; i++)
scanf("%d",&a[i]);//答案序列
for(;;){
int A=0,B=0;
int j;
for(j=0; j<n; j++){
scanf("%d",&b[j]);//猜的序列
if(a[j]==b[j])
A++;//直接统计位置相同数字个数
}
if(b[0]==0) break;
int d;
for(d=1; d<10; d++){
int count1=0,count2=0;
for(j=0; j<n; j++){
if(a[j]==d) count1++;
if(b[j]==d) count2++;
}
if(count1 < count2)
B += count1;
else
B += count2;//B取a数组跟b数组相同元素个数的最小值
}
printf(" (%d,%d)\n",A,B-A);//从B中减去位置正确的个数得到出现过但位置不对的个数
}
}
return 0;
}