列表

详情


NC200519. Tic-Tac-Toe

描述

小 A 和小 B 在玩井字棋,他们不懂规则,所以可能出现一个人连下多手等情况。

他们希望结束游戏,请你来判定输赢。

判断小A/小B 赢的依据是存在任一行/列/对角线上的棋子都是 小A/小B 下的。

输入描述

第一行一个整数 T ,表示有 T 组数据。

对于每组数据:输入三行,每行三个字符。
输入的字符只可能是 'A' 'B' '.' 中的一个, 'A' 表示这个棋子是小 A 下的,'B' 表示是小 B 下的,'.' 表示这个地方没有棋子。

保证  。

输出描述

对于每组数据输出一行一个字符串,若小 A 赢,输出 Yes ,小 B 赢输出 No,两人都满足获胜条件输出 invalid ,前面三种情况都不符合则输出 draw 。

示例1

输入:

2
AAA
AAA
...
...
BBB
AAA

输出:

Yes
invalid

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 492K, 提交时间: 2020-02-16 14:32:35

#include<stdio.h>
char mat[3][4];
int win(char c)
{
	int i;
	for(i=0;i<3;i++)
	{
		if(mat[i][0]==c&&mat[i][1]==c&&mat[i][2]==c||mat[0][i]==c&&mat[1][i]==c&&mat[2][i]==c)
		return 1;
	}
	if(mat[0][0]==c&&mat[1][1]==c&&mat[2][2]==c||mat[0][2]==c&&mat[1][1]==c&&mat[2][0]==c)
	return 1;
	return 0;
}
int main()
{
	int T,i,a,b;
	scanf("%d",&T);
	while(T--)
	{
		for(i=0;i<3;i++)
		scanf("%s",mat[i]);
		a=win('A');
		b=win('B');
		if(a&&!b)
		puts("Yes");
		else if(!a&&b)
		puts("No");
		else if(a&&b)
		puts("invalid");
		else
		puts("draw");
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 24ms, 内存消耗: 3436K, 提交时间: 2020-02-16 12:52:09

def List(X):
    return X + [''.join([X[0][i],X[1][i],X[2][i]]) for i in range(3)] + [''.join([X[i][i]for i in range(3)]),''.join([X[i][2-i]for i in range(3)])]

T = int(input())
for t in range(T):
    X = []
    for i in range(3):
        X.append(input())
    LX = List(X)
    if 'AAA' in LX:
        if 'BBB' in LX:
            print('invalid')
        else:
            print('Yes')
    else:
        if 'BBB' in LX:
            print('No')
        else:
            print('draw')
            
    

上一题