题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
思路很简单:用一个变量 index 记录当前的页面的首个歌曲,用一个变量 cur 记录当前选中的歌曲。
分别根据不同的指令处理特殊分页,一般分页以及正常移动 cur 的情况即可,但其中输入用例的 n < =4 时,需要考虑的细节还挺多的。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int n = in.nextInt(); //歌曲数量
String str = in.next(); //命令
int index = 1; //记录列表的起始位置
int cur = 1; //记录当前选中的歌曲
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
//如果当前的指令为 U
if(c == 'U'){
//特殊翻页
if(index == 1 && cur == 1){
index = n-3 > 1 ? n-3 : 1;
cur = n;
}else if(index!=1 && cur==index){ //一般翻页
index--;
cur--;
}else{
cur = cur-1 > 0 ? cur-1 : cur;
}
}else{ //指令为 D
//特殊翻页,这里的条件需要好好想一想:(index==1 && cur == n && n<=4)处理的是 n 小于等于4的情况
if((index == n-3 && cur==n||(index==1 && cur == n && n<=4))){
index = 1;
cur = 1;
}else if(cur == index+3){ //一般翻页
index++;
cur++;
}else{
cur++;
}
}
}
for(int i=index;i<=n && i<index+4;i++){
System.out.print(i+" ");
}
System.out.println();
System.out.println(cur);
}
}
}


查看23道真题和解析