題目大意就是給你一個 3*3 棋盤,要你判斷 A,B 哪個選手贏了,或者該誰下了,或者平局,或者棋盤不符合規則。
這裏分六類 (假設A先走)
1. 輸出 the first player won 的條件是,A符合贏的條件(某行或某列或對角線的字符一樣),且B不符合贏的條件,且A的步數比B多1,因爲A先走的。
2. 輸出 thesecond player won 的條件是,B符合贏的條件,且A不符合贏的條件,且A跟B的步數一樣。
3. 輸出 draw 的條件是,A和B都不符合贏的條件,且A的步數爲5,B的步數爲4.(滿格,其他數字組合的滿格不符合規則)
4. 輸出 first 的條件是,A和B都不符合贏的條件,且A的步數跟B的一樣,就該A走了。
5. 輸出 thesecond player won 的條件是,A和B都不符合贏的條件,且A的步數比B多1,就該B走了。
6. 剩下的全是不符合規則的情況,輸出
illegal
代碼如下:
#include <iostream>
using namespace std;
int main()
{
char ch[9];
bool flag1=false,flag2=false;
int i=1,num0=0,numx=0;
for(;i<=9;++i)
{
cin>>ch[i];
if(ch[i]=='X')
++numx;
else if(ch[i]=='0')
++num0;
}
if((ch[1]==ch[2]&&ch[2]==ch[3]&&ch[3]=='X')||
(ch[4]==ch[5]&&ch[5]==ch[6]&&ch[6]=='X')||
(ch[7]==ch[8]&&ch[8]==ch[9]&&ch[9]=='X')||
(ch[1]==ch[4]&&ch[4]==ch[7]&&ch[7]=='X')||
(ch[2]==ch[5]&&ch[5]==ch[8]&&ch[8]=='X')||
(ch[3]==ch[6]&&ch[6]==ch[9]&&ch[9]=='X')||
(ch[1]==ch[5]&&ch[5]==ch[9]&&ch[9]=='X')||
(ch[3]==ch[5]&&ch[5]==ch[7]&&ch[7]=='X'))
flag1=true;
if((ch[1]==ch[2]&&ch[2]==ch[3]&&ch[3]=='0')||
(ch[4]==ch[5]&&ch[5]==ch[6]&&ch[6]=='0')||
(ch[7]==ch[8]&&ch[8]==ch[9]&&ch[9]=='0')||
(ch[1]==ch[4]&&ch[4]==ch[7]&&ch[7]=='0')||
(ch[2]==ch[5]&&ch[5]==ch[8]&&ch[8]=='0')||
(ch[3]==ch[6]&&ch[6]==ch[9]&&ch[9]=='0')||
(ch[1]==ch[5]&&ch[5]==ch[9]&&ch[9]=='0')||
(ch[3]==ch[5]&&ch[5]==ch[7]&&ch[7]=='0'))
flag2=true;
if(flag1&&!flag2&&numx==num0+1)
cout<<"the first player won";
else if(!flag1&&flag2&&numx==num0)
cout<<"the second player won";
else if(!flag1&&!flag2&&numx==5&&num0==4)
cout<<"draw";
else if(!flag1&&!flag2&&numx==num0)
cout<<"first";
else if(!flag1&&!flag2&&numx==num0+1)
cout<<"second";
else
cout<<"illegal";
return 0;
}