本帖最後由 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;
} |