题目:给你一串数字,再给你对应的猜的数字,输出位置和数字都猜对的个数,以及只猜对数字的个数。
分析:模拟,猜数字。想起多年以前的文曲星上的游戏猜数字了。
告诉你有n个数字(1-9),然后让你猜,程序会返回状态:
i个位置和数字都对,j个只有数字猜对(不包括位置对的)返回为:iAjB。
直接模拟即可,位置不对的直接统计每个数字出现的次数的最小值,减去全对的个数即课。
说明:注意输出格式。
#include <iostream>
#include <cstdlib>
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int A[1002];
int B[1002];
int sumA[10];
int sumB[10];
int a1( int n )
{
int count = 0;
for ( int i = 0 ; i < n ; ++ i )
count += (A[i]==B[i]);
return count;
}
int b1( int n )
{
for ( int i = 1 ; i <= 9 ; ++ i )
sumA[i] = sumB[i] = 0;
for ( int i = 0 ; i < n ; ++ i ) {
sumA[A[i]] ++;
sumB[B[i]] ++;
}
int count = 0;
for ( int i = 1 ; i <= 9 ; ++ i )
count += min(sumA[i],sumB[i]);
return count;
}
int main()
{
int cases = 1,n;
while ( cin >> n && n ) {
for ( int i = 0 ; i < n ; ++ i )
cin >> A[i];
cout << "Game " << cases ++ << ":" << endl;
while ( 1 ) {
int sum = 0;
for ( int i = 0 ; i < n ; ++ i ) {
cin >> B[i];
sum += B[i];
}
if ( !sum ) break;
cout << " (" << a1(n) << "," << b1(n)-a1(n) << ")" << endl;
}
}
return 0;
}