enter 發表於 2015-10-27 01:54:17

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

}while(a!=0||b!=0); //若a和b同時都是0,則遊戲停止。
       
        return 0;
       
}
頁: [1]
查看完整版本: 經典「猜數字」AABB的遊戲