华为OD机试 2024E卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
有一批箱子(形式为字符串 Q,设为str),要求将这批箱子按从上到下以下Z字形顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。
例如:箱子ABCDEF, 空地宽度为3,摆放结果如图:
则输出结果为:
AFG
BE
CD
二、输入描述
输入一行字符串,通过空格分隔,前面部分为字母或数字组成的字符串str,表示箱子;后面部分为数字n,表示空地的宽度。
例如:ABCDEFG 3
三、输出描述
箱子摆放结果,如题目示例所示
AFG
BE
CD
四、测试用例
测试用例1:
1、输入
ABCDEFGHIJK 4
2、输出
AHI
BGJ
CFK
DE
3、说明
测试用例2:
1、输入
123456789 4
2、输出
189
27
36
45
3、说明
五、解题思路
- 输入处理:
- 读取输入字符串str和宽度n。
- 初始化数据结构:
- 创建一个包含n个列表的列表(matrixLists),每个子列表对应空地的一列,用于存放摆放的箱子。
- 摆放箱子:
- 遍历字符串中的每个字符,根据当前位置i和宽度n计算当前应该放置到哪一列。
- 使用一个布尔变量reverse来控制当前行的摆放方向(从左到右或从右到左)。每当到达新的一行(即i % n == 0)时,切换reverse的值。
- 如果reverse为true,则调整列索引为n - 1 - k,实现反向摆放。
- 将当前字符添加到对应的列列表中。
- 输出结果:
- 遍历matrixLists中的每个子列表,将其中的字符连接成字符串,并逐行输出,得到最终的摆放结果。
六、Java算法源码
public class OdTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int n = sc.nextInt();
List<List<String>> matrixLists = new ArrayList<>();
for (int i = 0; i < n; i++) {
matrixLists.add(new ArrayList<>());
}
boolean reverse = true;
for (int i = 0; i < s.length(); i++) {
int k = i % n;
if (k == 0) {
reverse = !reverse;
}
if (reverse) {
k = n - 1 - k;
}
matrixLists.get(k).add(s.charAt(i) + "");
}
for (List<String> list : matrixLists) {
System.out.println(String.join("", list));
}
}
}
七、效果展示
1、输入
ABC 5
2、输出
A
B
C
3、说明
初始化:创建5个空的列列表:column0, column1, column2, column3, column4。
遍历字符串:
i=0 (A): k=0%5=0,切换方向(reverse 从 true 变为 false),放入 column0。
i=1 (B): k=1%5=1,方向不变,放入 column1。
i=2 ©: k=2%5=2,方向不变,放入 column2。
最终列内容:
column0: A → “A”
column1: B → “B”
column2: C → “C”
column3: 空
column4: 空
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。