华为OD机试真题汇总目录
【华为OD机试】真题汇总A+B+C+D券(Python实现)
一、题目
题目描述:
幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友同班,请你帮忙把同班的小朋友找出来。小
朋友的编号是整数,与前一位小朋友同班用Y表示,不同班用N表示。
学生序号范围(0,999],如果输入不合法则打印ERROR。
二、输入输出
输入描述:
输入为空格分开的小朋友编号和是否同班标志。
输出描述:
输出为两行,每一行记录一个班小朋友的编号,编号用空格分开,且:1.编号需按照升序排列。2.若只有一个班的小朋友,第二行为空行。
三、示例
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
1/N 2/Y 3/N 4/Y
输出:
1 2
3 4
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
1/N 2/Y 3/N 4/Y 5/Y
输出:
1 2
3 4 5
四、解题思路
- 从输入中读取一行字符串,将其分割为数组。
- 创建 Person 对象数组,根据输入数据初始化每个人的属性。
- 如果人员编号不在 0 到 999 之间,输出 "ERROR" 并返回。
- 根据规则为每个人分配队伍,确定每个人是属于哪个队伍。
- 组装队伍信息,分别存储在两个列表中。
- 根据题目要求输出队伍信息,确保编号较小的队伍在前面。
五、参考代码
/*
* @#coding: utf-8
* @Author: mgc
* @Date: 2024-02-02 17:47:00
* @LastEditors: Do not edit
* @LastEditTime: 2024-02-02 17:48:55
*/
// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;
import java.util.*;
public class Main {
public static void main(String[] args) {
// 处理输入
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] splitInput = line.split(" ");
Person[] people = new Person[splitInput.length];
boolean isError = false;
// 解析输入,创建 Person 对象
for (int i = 0; i < splitInput.length; i++) {
String[] personInfo = splitInput[i].split("/");
people[i] = new Person(Integer.parseInt(personInfo[0]),
Objects.equals(personInfo[1], "Y"));
if (people[i].value < 0 || people[i].value > 999) {
isError = true;
}
}
if (isError) {
System.out.println("ERROR");
return;
}
// 分配队伍
people[0].team = 1;
for (int i = 1; i < people.length; i++) {
if (people[i].isTrue) {
people[i].team = people[i - 1].team == 1 ? 1 : 2;
} else {
people[i].team = people[i - 1].team == 1 ? 2 : 1;
}
}
// 组装队伍
ArrayList<Integer> team1 = new ArrayList<>();
ArrayList<Integer> team2 = new ArrayList<>();
for (Person person : people) {
if (person.team == 1) {
team1.add(person.value);
} else {
team2.add(person.value);
}
}
// 输出队伍信息
if (team2.isEmpty()) {
System.out.println(convertListToString(team1));
System.out.println();
return;
}
// 按照编号顺序输出队伍信息
if (team1.get(0) < team2.get(0)) {
System.out.println(convertListToString(team1));
System.out.println(convertListToString(team2));
} else {
System.out.println(convertListToString(team2));
System.out.println(convertListToString(team1));
}
}
// 将列表转换为字符串
private static String convertListToString(List<Integer> list) {
Collections.sort(list);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i != list.size() - 1) {
sb.append(" ");
}
}
return sb.toString();
}
// 定义 Person 类
private static class Person {
int value;
boolean isTrue;
int team;
public Person(int value, boolean isTrue) {
this.value = value;
this.isTrue = isTrue;
}
}
}
标签:java,JAVA,people,真题,OD,System,util,Person,import
From: https://blog.csdn.net/u014481728/article/details/136661378