题目详情
小明听歌,小明会播放歌单中的第一首曲子,然后将播放的这首曲子移除出歌单,
如果歌单里还有曲子,就把剩余曲子中的第一首挪到最后一首去。
小明会如此播放直到所有曲子都被移除出歌单(也就是都被播放了一遍)。
小明播了几次就累了,他不想一遍又一遍操作,于是向你求助:
他把初始的歌单给你,希望你能直接把按照小明规则下的真实播放顺序告诉给他。
输入描述
第一行1个整数n,表示歌单的长度。
第二行n个整数a1 a2…an,表示从第一首到最后一首顺序的初始歌单中各歌曲的ID。
对于100%的数据,1≤n≤50000,1≤a≤10^9
输出描述
输出一行n个整数表示按照规则后真正的放歌顺序。
题目分解/做题思路
题目分解:
给一个歌曲列表
1、首先先听第一首歌,然后删除。
2、判断歌单是否为空,如果不为空,剩下的歌单作为一个新的歌单
3、将新歌单中的第一首歌 移到 最后一首
4、播放移动后新列表的第一首歌,并删除。
5、知道新列表中的歌曲为空,返回结果,结果是每次播放歌曲的ID
可以理解为一个list列表,第一次删除第一个元素,然后列表的第一个元素移动到最后一个元素,然后再删除第一个元素。知道列表为空
解题方法01
解题步骤
public class ListenMusic {
public static void main(String[ ] args) {
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(sc.nextInt());
}
sc.close();
List<Integer> result = new ArrayList<>(); // 存放当前播放的歌曲
while (!list.isEmpty()){ // 如果列表不为空
result.add(list.get(0)); // 将当前列表的第一首播放的歌放入结果中
list.remove(0); // 播放后移除
if(!list.isEmpty()){ // 判断剩下的歌曲是否为空
list.add(list.get(0)); // 如果不为空,将第一首在末尾处
list.remove(0); // 将第一个放到末尾了,所以删除原来位置的元素
}
}
for (int i = 0; i < result.size(); i++) {
System.out.print(result.get(i) +" ");
}
}
}
相关标签:循环