第一行输入整数
(询问次数)。
每组询问输入
行,每行长度为
的字符串,仅含 ``
``(白子)、``
``(黑子)、``
``(未落子),表示棋盘状态。
对每局输出一行:
小红胜输出 ``
``;
小紫胜输出 ``
``;
平局输出 ``
``。
3 ... o*o ... o** ooo ..* o*o *o* o*o
yukari kou draw
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
for (int i = 0; i < t; i++) {
// 读取3x3棋盘
char[][] board = new char[3][3];
for (int j = 0; j < 3; j++) {
String line = scanner.nextLine();
board[j] = line.toCharArray();
}
// 判断双方被夹吃的情况
// 小红(黑棋)是否有被夹吃的棋子
boolean redEaten = hasEaten(board, '*');
// 小紫(白棋)是否有被夹吃的棋子
boolean purpleEaten = hasEaten(board, 'o');
// 根据规则判断结果
if (redEaten && !purpleEaten) {
System.out.println("yukari"); // 小紫胜
} else if (!redEaten && purpleEaten) {
System.out.println("kou"); // 小红胜
} else {
System.out.println("draw"); // 平局
}
}
scanner.close();
}
/**
* 检查指定棋子是否有被夹吃的情况
* @param board 棋盘
* @param piece 要检查的棋子('*'或'o')
* @return 是否有被夹吃的棋子
*/
private static boolean hasEaten(char[][] board, char piece) {
char opponent = (piece == '*') ? 'o' : '*';
// 检查横向被夹吃的情况
for (int row = 0; row < 3; row++) {
// 中间是当前棋子,两边是对方棋子
if (board[row][1] == piece &&
board[row][0] == opponent &&
board[row][2] == opponent) {
return true;
}
}
// 检查纵向被夹吃的情况
for (int col = 0; col < 3; col++) {
// 中间是当前棋子,两边是对方棋子
if (board[1][col] == piece &&
board[0][col] == opponent &&
board[2][col] == opponent) {
return true;
}
}
return false;
}
}
#include <iostream>
#include <vector>
using namespace std;
int is_win(char mp[3][3]) {
int h = 0, z = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (mp[i][j] == 'o') {
if (j + 2 < 3 && mp[i][j + 2] == 'o' && mp[i][j + 1] == '*') {
h = 1;
continue;
}
if (j - 2 > 0 && mp[i][j - 2] == 'o' && mp[i][j - 1] == '*') {
h = 1;
continue;
}
if (i - 2 > 0 && mp[i - 2][j] == 'o' && mp[i - 1][j] == '*') {
h = 1;
continue;
}
if (i + 2 < 3 && mp[i + 2][j] == 'o' && mp[i + 1][j] == '*') {
h = 1;
continue;
}
}
if (mp[i][j] == '*') {
if (j + 2 < 3 && mp[i][j + 2] == '*' && mp[i][j + 1] == 'o') {
z = 1;
continue;
}
if (j - 2 > 0 && mp[i][j - 2] == '*' && mp[i][j - 1] == 'o') {
z = 1;
continue;
}
if (i - 2 > 0 && mp[i - 2][j] == '*' && mp[i - 1][j] == 'o') {
z = 1;
continue;
}
if (i + 2 < 3 && mp[i + 2][j] == '*' && mp[i + 1][j] == 'o') {
z = 1;
continue;
}
}
}
}
if (h == 0 && z == 0) return 0;
if (h == 1 && z == 0) return 2;
if (h == 0 && z == 1) return 1;
return 0;
}
int main() {
int n, i = 0;
char mp[3][3];
cin >> n;
int c = n * 3;
while (c--) {
string s;
cin >> s;
for (int j = 0; j < 3; j++) {
mp[i][j] = s[j];
}
i++;
if (i == 3) {
i = 0;
int r = is_win(mp);
if (r == 1) {
cout << "kou" << endl;
} else if (r == 2) {
cout << "yukari" << endl;
} else {
cout << "draw" << endl;
}
}
}
}