真是天才...
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 100;
int inp[100];
int ans[100];
int main(void) {
ifstream IN("IN");
ofstream OUT("OUT");
while (!IN.is_open() && !OUT.is_open());
int Size;
int Time = 0;
while (IN >> Size) {
if (Size == 0) break;
for (int i = 0; i < Size; i++)
IN >> ans[i];
OUT << "Game " << ++Time << ":" << endl;
while (true) {
int Acount = 0;
int Bcount = 0;
for (int i = 0; i < Size; i++) {
IN >> inp[i];
if (inp[i] == ans[i]) Acount++; //如果与答案序列结果相同则A++
}
if (inp[0] == 0)
break;
//遍历1~9,统计每个数字在inp和ans出现的次数。
//Bcount储存出现过但位置不对的数字的数目
for (int i = 1; i <= 9; i++) {
int count1 = 0, count2 = 0;
for (int j = 0; j < Size; j++) {
if (ans[j] == i) count1++;
if (inp[j] == i) count2++;
}
//B+=较小的count,很容易理解
//比如,我们有这样的输入数据
//ANS 1 1 2 3 3
//INP 2 2 1 1 1
//则Bcount就要加2
if (count1 < count2)
Bcount += count1;
else Bcount += count2;
}
//但事实上Bcount还并不正确,需要考虑重合的部分
//所以我们需要使用Bcount -= Acount//Acount代表重合部分
//想出这样的算法的真tm是个天才
Bcount -= Acount;
OUT << " (" << Acount << "," << Bcount << ")" << endl;
}
}
IN.close();
OUT.close();
}