#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