CF 3C Tic-tac-toe 井字棋 簡潔代碼

題目大意就是給你一個 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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章