NC200519. Tic-Tac-Toe
描述
判断小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')