题目描述:
幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友同班,请你帮忙把同班的小朋友找出来。小朋友的编号是整数,与前一位小朋友同班用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 <= 999
def 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_class
if same_class :
class1.append(child_num)
else:
class2.append(child_num)
class1.sort()
class2.sort()
if class1 == [] or class2 == []:
class_list = class1 + class2
return " ".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)