http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=276
题意:
输入N个CODE,N个GUESS数。逐个比较,如果数字相等CODEi==GUESSj,且位置相同i==j时,为strong;否则为weak。
要求结果输出(strong, weak)个数。
解题:
按题目对strong和weak的定义,直接进行一个个对比。注意:匹配过的数字,不能再使用第二次。
简单的题目还要上网找答案,真水!
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
// #define LOCAL_TEST
int main()
{
#ifdef LOCAL_TEST
freopen("f:\\in.txt", "r", stdin);
freopen("f:\\out.txt", "w+", stdout);
#endif
int nCode; // determine number of code
int nIndex; // count the game
int tmpIn; // temporary input for in
nIndex = 0;
while ( cin >>nCode )
{
// if nCode is 0, input end
if ( nCode == 0 )
{
break;
} // end if
// count the game
nIndex++;
// get Codes using vector
vector <int> vCode;
for ( int i=0; i<nCode; i++ )
{
cin >>tmpIn;
vCode.push_back(tmpIn);
} // end for
//output format text
cout <<"Game " <<nIndex <<":" <<'\n';
// start to guess
while ( 1 )
{
// get Guesses using vector
vector <int> vGuess;
for ( int i=0; i<nCode; i++ )
{
cin >>tmpIn;
vGuess.push_back(tmpIn);
} // end for
// reset flag vector for guess numbers
vector <int> vVisited;
for ( int i=0; i<nCode; i++ )
{
vVisited.push_back(0);
} // end for
// end guess
if ( vGuess[0] == 0 )
{
break;
} // end if
int strong = 0;
int weak = 0;
// Find all matches
for ( int i=0; i<nCode; i++ )
{
for ( int k=0; k<nCode; k++ )
{
if ( vVisited[k] == 0 )
{
if ( vGuess[i] == vCode[k] && i == k)
{
vVisited[k] = 1;
strong++;
break;
} // end if
else
{
if ( vGuess[i] == vCode[k] && i != k
&& vGuess[i] != vCode[i] && vGuess[k] != vCode[k])
{
vVisited[k] = 1;
weak++;
break;
} // end if
} // end else
} // end if
} // end for
} // end for
// output end
cout <<" " <<"(" <<strong <<"," <<weak <<")" <<'\n';
} // end while
} // end while
return 0;
}