题意是猜密码。
给你一段密码,然后余下的行数为猜的密码。
若所猜的密码与原密码位置相同且数字相同,则为情况一;
若所猜的密码与原密码中的一个数字相同但位置不同,为情况二。
统计情况一与情况二的个数。
n方的搜索,加个标记就ko了。
代码:
#include <string.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int key[1001];
int tmp[1001];
int guess[1001];
int n;
int r, p;
void judge()
{
for (int i = 0; i < n; i++)
{
if (tmp[i] == guess[i])
{
r++;
guess[i] = -1;
tmp[i] = -1;
}
}
for (int i = 0; i < n; i++)
{
if (guess[i] == -1)
continue;
for (int j = 0; j < n; j++)
{
if (tmp[j] == -1)
continue;
if (guess[i] == tmp[j])
{
p++;
guess[i] = -1;
tmp[j] = -1;
break;
}
}
}
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
int ncase = 1;
while (cin >> n)
{
if (n == 0)
break;
memset(key, 0, sizeof(key));
memset(tmp, 0, sizeof(tmp));
memset(guess, 0, sizeof(guess));
for (int i = 0; i < n; i++)
{
cin >> key[i];
tmp[i] = key[i];
}
cout << "Game "<< ncase++ << ":" <<endl;
while (1)
{
r = 0;
p = 0;
for (int i = 0; i < n; i++)
{
cin >> guess[i];
}
if (guess[0] == 0)
break;
judge();
cout <<" (" <<r << "," << p <<")"<<endl;
for (int i = 0; i < n; i++)
{
tmp[i] = key[i];
}
}
}
return 0;
}