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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值