2015年7月28日 星期二

[UVA] 340 - Master-Mind Hints

猜數字遊戲
方法:先算A再算B,每對到一個數字,就將個數字改掉避免後面的數字重複對
兩層for迴圈就可以了~
例如:
ANS    :1 2 2 3
GUESS:2 2 3 4
先算A之後變成
ANS    :1 A 2 3
GUESS:2 A 3 4
再算B
ANS    :1 A B B
GUESS:B A B 4
/* 20150728
 * hanting
 * UVa 340 - Master-Mind Hints
 * C++
 */
#include <iostream>
#include <iomanip>//setw
using namespace std;
int main()
{
    int gameN=1;
    int numN;
    while(cin>>numN and numN)
    {
        int ans[numN];
        for(int i=0;i<numN;i++)
        {
            cin>>ans[i];
        }
        int sum=0;
        cout<<"Game "<<gameN++<<":"<<endl;
        do
        {
            int A=0,B=0;
            int temp[numN];
            copy(ans,ans+numN,temp);
            sum=0;
            int guess[numN];
            for(int i=0;i<numN;i++)
            {
                cin>>guess[i];
                sum+=guess[i];
            }
            /*check*/
            //count A
            for(int i=0;i<numN;i++)
            {
                if(temp[i]==guess[i])
                {
                    A++;
                    temp[i]=-1;
                    guess[i]=-2;
                }
            }
            //count B
            for(int i=0;i<numN;i++)//ans
            {
                for(int j=0;j<numN;j++)//guess
                {
                    if(guess[j]==temp[i])
                    {
                        B++;
                        temp[i]=-1;
                        guess[j]=-2;
                    }
                }
            }
            if(sum)cout<<setw(5)<<"("<<A<<","<<B<<")"<<endl;
        }while(sum);
    }
    return 0;
}

沒有留言:

張貼留言