本文主要是介绍【华为机试】2023年真题B卷(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
四、解题思路
解析输入字符串,根据小朋友的编号和与前一个同学是否同班标志将其分到两个班级中。然后,对每个班级的小朋友编号进行升序排序,并将结果输出。
五、参考代码
# -*- coding: utf-8 -*-
'''
@File : 2023-B-分班问题.py
@Time : 2023/12/18 22:33:03
@Author : mgc
@Version : 1.0
@Desc : None
'''def is_valid_child_num(child_num):# 判断小朋友编号是否合法return 0 < child_num <= 999def classify_children(input_str):children = input_str.split()if len(children) == 0:return "ERROR"class1, class2 = [], [] # 存储两个班级的小朋友编号same_class = True # 标记是否与前一位小朋友同班for child in children:child_num, child_sign = int(child.split('/')[0]), child.split('/')[1]if not is_valid_child_num(child_num):return "ERROR"if child_sign == "N":same_class = not same_classif same_class :class1.append(child_num)else:class2.append(child_num)class1.sort()class2.sort()if class1 == [] or class2 == []:class_list = class1 + class2return " ".join(map(str, class_list))elif class1[0] <= class2[0]:return " ".join(map(str, class1)) + "\n" + " ".join(map(str, class2))else:return " ".join(map(str, class2)) + "\n" + " ".join(map(str, class1))input_str = input()
result = classify_children(input_str)
print(result)
这篇关于【华为机试】2023年真题B卷(python)-分班问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!