洛谷——P1838 三子棋I

P1838 三子棋I

题目描述

小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。

由于小a比较愚蠢,uim总是让他先。

我们用9个数字表示棋盘位置:

123 456 789 所有的棋谱都是已经结束的棋局,要么一方获胜,要么平局。

今天,他们下了一下午的棋,小a为了提高技术,录下了很多棋谱。他想知道,一盘棋结束时,到底是谁赢。

输入格式

一行,一串数字,表示落子的地点。小a总是先下

输出格式

一行,如果小a赢,输出“xiaoa wins.”。如果uim赢,输出“uim wins.”。如果平局,输出“drew.”

输入输出样例

输入#1

5237649

输出#1

xiaoa wins.

输入#2

539128647

输出#2

drew.
题解:

首先我们明确一点,

如果没有下满就结束,则意味着最后那个下棋的胜利。

如果下满了,就有两种情况,
第一:最后一棋赢了。
第二:最后没一点用,即平局。

然后就是重头戏如何判断输赢,我不会大佬们的方法,我只好投机取巧。
首先明确一点,赢的可能只有这8种
1 2 3
4 5 6
7 8 9
1 5 9
3 5 7
1 4 7
2 5 8
3 6 9
那么我就设一个book数组,存最后一棋那个人下过的所有棋,然后对比成立则win,一个都不成立则drew.
下面放出代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string s; cin >> s;
	if (s.size() < 9) 
	{ 
		if (s.size() % 2 == 1)cout << "xiaoa wins."; 
		else cout << "uim wins."; 
	}
	else
	{
		int flag = 0,book[10]={0};
		for (int i = 0; i < s.size(); i++)if (i % 2 == 0)book[s[i] - '0'] = 1;
		if (book[1] == 1 && book[2] == 1 && book[3] == 1)flag = 1;
		if (book[4] == 1 && book[5] == 1 && book[6] == 1)flag = 1;
		if (book[7] == 1 && book[8] == 1 && book[9] == 1)flag = 1;
		if (book[1] == 1 && book[5] == 1 && book[9] == 1)flag = 1;
		if (book[3] == 1 && book[5] == 1 && book[7] == 1)flag = 1;
		if (book[1] == 1 && book[4] == 1 && book[7] == 1)flag = 1;
		if (book[2] == 1 && book[5] == 1 && book[8] == 1)flag = 1;
		if (book[3] == 1 && book[6] == 1 && book[9] == 1)flag = 1;
		if (flag)cout << "xiaoa wins.";
		else cout << "drew.";
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值