#P1461. 第1题-小红的九宫格
          
                        
                                    
                      
        
              - 
          
          
                      1000ms
            
          
                      Tried: 189
            Accepted: 82
            Difficulty: 3
            
          
          
          
                       所属公司 : 
                              京东
                                
            
                        
              时间 :2023年8月19日
                              
                      
          
 
- 
                        算法标签>模拟          
 
第1题-小红的九宫格
思路:模拟
给定一个3∗3的仅包含"o"、"."、"*"的矩阵,我们需要检查里面是否存在"o*o"的字符结构或者是"*o*"的字符结构,横向或者纵向结构都需要检查。如果仅存在"o*o",则输出"yukari",如果仅存在"*o*",则输出"kou",否则输出"draw"。
题目意思很简单,数据量也不大,直接按照题意模拟即可。
代码
C++
#include <iostream>
#include <cstdio>
using namespace std;
int T; // 测试用例数
char s[5][5]; // 用于存储九宫格的字符数组
// 检查是否存在 x 在中间,两侧为 y 的情况
bool check(char x, char y){
    for(int i=1; i<=3; ++i){
        for(int j=1; j<=3; ++j){
            if(s[i][j]==x && ((s[i-1][j]==y && s[i+1][j]==y) || (s[i][j-1]==y && s[i][j+1]==y))) 
                return true;
        }
    }
    return false;
}
int main(){
    scanf("%d", &T); // 读取测试用例数
    while(T--){
        scanf("%s", s[1]+1); // 读取第一行字符串并存储到 s 数组中的第一行
        scanf("%s", s[2]+1); // 读取第二行字符串并存储到 s 数组中的第二行
        scanf("%s", s[3]+1); // 读取第三行字符串并存储到 s 数组中的第三行
        
        bool x = check('o','*');  // 检查是否存在 'o' 在中间,两侧为 '*' 的情况
        bool y = check('*','o');  // 检查是否存在 '*' 在中间,两侧为 'o' 的情况
        
        if(x==y) 
            printf("draw\n"); // 如果 x 和 y 都为真或都为假,输出 "draw"
        else if(y==true) 
            printf("yukari\n"); // 如果 y 为真,输出 "yukari"
        else 
            printf("kou\n"); // 如果 y 为假,输出 "kou"
    }
    
    return 0;
}
python
def check(x, y, s):
    for i in range(1, 4):
        for j in range(1, 4):
            if s[i][j] == x and ((s[i-1][j] == y and s[i+1][j] == y) or (s[i][j-1] == y and s[i][j+1] == y)):
                return True
    return False
T = int(input())  # 读取测试用例数
for _ in range(T):
    s = [[' '] * 5 for _ in range(5)]  # 创建一个5x5的字符数组用于存储九宫格
    s[1][1:4] = input()  # 读取第一行字符串并存储到 s 数组中的第一行
    s[2][1:4] = input()  # 读取第二行字符串并存储到 s 数组中的第二行
    s[3][1:4] = input()  # 读取第三行字符串并存储到 s 数组中的第三行
    x = check('o', '*', s)  # 检查是否存在 'o' 在中间,两侧为 '*' 的情况
    y = check('*', 'o', s)  # 检查是否存在 '*' 在中间,两侧为 'o' 的情况
    if x == y:
        print("draw")  # 如果 x 和 y 都为真或都为假,输出 "draw"
    elif y:
        print("yukari")  # 如果 y 为真,输出 "yukari"
    else:
        print("kou")  # 如果 y 为假,输出 "kou"
Java
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(); // 读取多余的换行符
        while (T-- > 0) {
            char[][] s = new char[5][5]; // 用于存储九宫格的字符数组
            for (int i = 1; i <= 3; ++i) {
                s[i] = (" " + scanner.nextLine() + "    ").toCharArray(); // 读取并存储第i行字符串
            }
            boolean x = check('o', '*', s); // 检查是否存在 'o' 在中间,两侧为 '*' 的情况
            boolean y = check('*', 'o', s); // 检查是否存在 '*' 在中间,两侧为 'o' 的情况
            if (x == y) {
                System.out.println("draw"); // 如果 x 和 y 都为真或都为假,输出 "draw"
            } else if (y) {
                System.out.println("yukari"); // 如果 y 为真,输出 "yukari"
            } else {
                System.out.println("kou"); // 如果 y 为假,输出 "kou"
            }
        }
    }
    // 检查是否存在 x 在中间,两侧为 y 的情况
    public static boolean check(char x, char y, char[][] s) {
        for (int i = 1; i <= 3; ++i) {
            for (int j = 1; j <= 3; ++j) {
                if (s[i][j] == x && ((s[i - 1][j] == y && s[i + 1][j] == y) || (s[i][j - 1] == y && s[i][j + 1] == y))) {
                    return true;
                }
            }
        }
        return false;
    }
}
        题目内容
小红有一个神奇的九宫格,九宫格上只会有三种字符:".","o","*"。九宫格上的字符会不断的变化,同时,随着字符变化,九宫格整体的颜色也会发生变化。
小红观察了很久,发现了一个规律,如果仅存在类似"o*o"的情况,那么九宫格会变成蓝色;如果仅存在"*o*"的情况,那么九宫格会变成红色;如果两种情况都存在,那么九宫格会保持白色。
现在,小红想问问你,对于某一种情况,九宫格是什么颜色的?
输入描述
第一行输入一个正整数t,代表询问的次数。
接下来每组询问输入三行,每行是一个长度为3的字符串字符串,仅由'o'、"*"、"."组成。
输出描述
如果九宫格是蓝色的,输出"yukari",如果是红色的,输出“kou”,否则输出“draw”。
样例
输入
3
...
o*o
...
...
*o*
...
o..
*..
o..
输出
yukari
kou
yukari