code.club

標題: 經典「猜數字」AABB的遊戲 [打印本頁]

作者: enter    時間: 2015-10-27 01:54
標題: 經典「猜數字」AABB的遊戲
本帖最後由 enter 於 2015-10-27 17:41 編輯

輸入N個數字,可重覆,然後輸入猜的數字,位置和數字都對的是A,數字對但位置不對的則是B,但重覆的數字只能合一個B。


#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
        int n,k,j,a=0,b=0;
        cout<<"How many numbers?\n";
        cin>>n; //輸入有幾個數字

        int answer[n]; //正確答案的陣列
        int guess[n]; //猜答案的陣列
        int temp[n]; // 將正確答案複製過來的暫存陣列
        //先輸入正確答案
        for(k=0;k<n;k++)
         cin>>answer[k];
       
do{
        for(k=0;k<n;k++)
         //先將正確答案複製到暫存陣列
          temp[k]=answer[k];
          //每次循環 a,b 都要歸零
          a=0;
          b=0;
         //輸入所猜數字的陣列
        for(k=0;k<n;k++)
         cin>>guess[k];
        //先求 a ,就是數字和位置都正確的個數。       
        for(k=0;k<n;k++)
        if(guess[k]==temp[k])
        {
         guess[k]=-1;temp[k]=-1; //將本次符合的數字全都改成-1,以免在求B的時候又被重覆計算一次。很重要的一步。
         a++;
         }
        //求數字合但位置不對的個數       
        for(k=0;k<n;k++)
          for(j=0;j<n;j++)
          {
         if((k!=j)&&(guess[k]==temp[j])&&(guess[k]>=0&&temp[j]>=0)) //如果陣列位置不等於,但數字一樣,而且,這數字還是大於等於0的才列入計算。
                 {
                b++;guess[k]=-1; //將本次符合的數字全都改成-1,以免在求B的時候又被重覆計算一次。很重要的一步。
                temp[j]=-1;
                }
         }
       
        cout<<"["<<a<<"A, "<<b<<"B]"<<endl;

}while(a!=0||b!=0); //若a和b同時都是0,則遊戲停止。
       
        return 0;
       
}




歡迎光臨 code.club (http://code.club/) Powered by Discuz! X3.2