2024届-JD-(改编题)-第二套
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 合集传送们 -> 🧷学长刷题笔记
🍒 本专栏已收集
140+
套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🥢 01.卢小姐的魔法面料
问题描述
卢小姐是一名服装设计师,她最近发现了一种神奇的面料。这种面料由 的网格组成,每个格子上有三种可能的图案:圆点(
.
)、星星(*
)和爱心(o
)。
这种面料的图案会不断变化,同时面料的整体颜色也会随之改变。经过长时间的观察,卢小姐发现了以下规律:
- 如果面料上只出现
o*o
的图案组合,那么面料会变成蓝色。 - 如果面料上只出现
*o*
的图案组合,那么面料会变成红色。 - 如果面料上同时出现
o*o
和*o*
的图案组合,或者两者都不出现,那么面料会保持白色。
现在,卢小姐想请你帮忙判断,给定一种面料的图案,它的颜色会是什么。
输入格式
第一行包含一个正整数 ,表示询问的次数。
接下来对于每组询问,输入三行,每行包含一个长度为 的字符串,表示面料的图案。字符串只包含字符
'.'
、'*'
和 'o'
。
输出格式
对于每组询问,输出一行,表示面料的颜色:
- 如果面料是蓝色,输出
yukari
。 - 如果面料是红色,输出
kou
。 - 如果面料是白色,输出
draw
。
样例输入
3
...
o*o
...
...
*o*
...
o..
*..
o..
样例输出
yukari
kou
yukari
数据范围
题解
本题考察了字符串的处理和判断,主要是模拟。
需要分别判断面料的每一行和每一列是否出现了 o*o
或 *o*
的图案组合。
具体步骤如下:
- 读入询问次数
。
- 对于每组询问:
- 读入面料的图案,存储为一个
的字符矩阵。
- 初始化两个布尔变量
blue
和red
,分别表示是否出现了o*o
和*o*
的图案组合,初始值为false
。 - 遍历面料的每一行,判断是否出现了
o*o
或*o*
的图案组合,如果出现则将对应的布尔变量设为true
。 - 将面料的图案进行转置,得到每一列的图案。
- 遍历转置后的每一行(即原面料的每一列),判断是否出现了
o*o
或*o*
的图案组合,如果出现则将对应的布尔变量设为true
。 - 根据
blue
和red
的值,输出面料的颜色。
- 读入面料的图案,存储为一个
时间复杂度为 ,空间复杂度为
。
参考代码
- Python
t = int(input())
for _ in range(t):
fabric = [input().strip() for _ in range(3)]
fabric_t = list(map(''.join, zip(*fabric)))
blue = any(row == 'o*o' for row in fabric + fabric_t)
red = any(row == '*o*' for row in fabric + fabric_t)
if blue and not red:
print('yukari')
elif red and not blue:
print('kou')
else:
print('draw')
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
char[][] fabric = new char[3][3];
for (int i = 0; i < 3; i++) {
fabric[i] = sc.next().toCharArray();
}
boolean blue = false, red = false;
for (int i = 0; i < 3; i++) {
if (fabric[i][0] == 'o' && fabric[i][1] == '*' && fabric[i][2] == 'o') {
blue = true;
}
if (fabric[i][0] == '*' && fabric[i][1] == 'o' && fabric[i][2] == '*') {
red = true;
}
}
for (int j = 0; j < 3; j++) {
if (fabric[0][j] == 'o' && fabric[1][j] == '*' && fabric[2][j] == 'o') {
blue = true;
}
if (fabric[0][j] == '*' && fabric[1][j] == 'o' && fabric[2][j] == '*') {
red = true;
}
}
if (blue && !red) {
System.out.println("yukari");
} else if (red && !blue) {
System.out.println("kou");
} else {
System.out.println("draw");
}
}
}
}
- Cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
char fabric[3][3];
for (int i = 0; i < 3; i++) {
cin >> fabric[i];
}
bool blue = false, red = false;
for (int i = 0; i < 3; i++) {
if (fabric[i][0] == 'o' && fabric[i][1] == '*' && fabric[i][2] == 'o') {
blue = true;
}
if (fabric[i][0] == '*' && fabric[i][1] == 'o' && fabric[i][2] == '*') {
red = true;
}
}
for (int j = 0; j < 3; j++) {
if (fabric[0][j] == 'o' && fabric[1][j] == '*' && fabric[2][j] == 'o') {
blue = true;
}
if (fabric[0][j] == '*' && fabric[1][j] == 'o' && fabric[2][j] == '*') {
red = true;
}
}
if (blue && !red) {
cout << "yukari" << endl;
} else
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
利益相关,专栏短期内将不再更新 文章被收录于专栏
本专栏短期内不再更新,请勿继续订阅