code.club

 找回密碼
 立即註冊
搜索
查看: 8491|回復: 0
打印 上一主題 下一主題

經典「猜數字」AABB的遊戲

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2015-10-27 01:54:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 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;
       
}
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-4-23 17:42 , Processed in 0.091273 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表