幼儿园两个班的小朋友排队时混在了一起每个小朋友都知道自己跟前面一个小朋友是不是同班
请你帮忙把同班的小朋友找出来
小朋友的编号为整数
与前面一个小朋友同班用Y表示
不同班用N表示
输入描述:
输入为空格分开的小朋友编号和是否同班标志
比如 6/N 2/Y 3/N 4/Y
表示一共有4位小朋友
2和6是同班 3和2不同班 4和3同班
小朋友总数不超过999
0< 每个小朋友编号 <999
不考虑输入格式错误
输出两行
每一行记录一班小朋友的编号 编号用空格分开
并且
-
编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行
-
如果只有一个班的小朋友 第二行为空
-
如果输入不符合要求输出字符串ERROR
示例:
输入
1/N 2/Y 3/N 4/Y
输出
1 2
3 4
说明:2的同班标记为Y因此和1同班
3的同班标记位N因此和1,2不同班
4的同班标记位Y因此和3同班
我的猪脑对着网上的答案看了1个多小时菜开窍!!!练个锤子的算法题!
主要思路:第一项是重点,根据题目理解每一项的N/Y是对前一项的描述。然后下意识的觉得第一项的没有用,要从第二项算起,让我想得很复杂。
从第一项的N/Y就可以分组了,假设第0项是1班(不在数组中),那第一项Y他就是1班,N就是2班。分好班以后就可以根据后面的N/Y切换flag来判断他是几班的,你懂得。
let str = '1/N 2/Y 3/N 4/Y'
function test(str){
let arr = str.split(' ')
let oneClass = []
let twoClass = []
let isOne = true
for(let i of arr){
let num = i.split('/')[0]
let same = i.split('/')[1]
if(isOne){
if(same==='Y'){
oneClass.push(num)
}else {
twoClass.push(num)
isOne = false
}
}else {
if(same==='Y'){
twoClass.push(num)
}else {
oneClass.push(num)
isOne = true
}
}
}
console.log(oneClass.sort().join(' '));
console.log(twoClass.sort().join(' '));
}
test(str)