题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
萌新求大佬指点;
思路:光标位置比较好得到,用整数代表光标位置U则减1,D则加1,只需要判断是否为顶部或者底部即可。需要解决的主要问题是歌曲怎么显示,题目说明只能显示四首歌,所以直接用一个长度为4的数组代表显示的歌曲,初始数组为1234;向下移动则数组的数加1,向上则减1;数量小于4时,就不需要数组,直接显示所有歌曲
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { int n = Integer.parseInt(in.nextLine()); String s = in.nextLine(); int k = 1;//光标初始位置 if (n <= 4) { //长度小于等于4时,直接显示全部歌曲 for (int i = 1; i <= n; i++) { System.out.print(i + " "); } System.out.println();//换行 //遍历输入的操作字符串,判断光标位置 for (int i = 0; i < s.length(); i++) { //按U光标k减1 if (s.charAt(i) == 'U') { //光标为1时移到尾部,不为1则减1 if (k == 1) { k = n; } else { k--; } } //按D光标k加1 else { //光标在最下方时重置为1 if (k == n) { k = 1; } else { k++; } } } } else { //长度大于4时,判断是否需要翻页 //用长度为4的数组表示该显示的歌曲 int[] num = new int[] {1, 2, 3, 4}; //初始页面1234 for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == 'U') { if (k == 1) { k = n; } else { k--; } //光标在尾部时,直接显示最后四首歌 if (k == n) { num = new int[] {n - 3, n - 2, n - 1, n}; } //向上移动时,判断移动后的光标与数组第一个数的大小,小于则需要翻页 else if (k < num[0]) { //数组中每个数减1代表向上翻页 for (int j = 0; j < 4; j++) { num[j] = num[j] - 1; } } } else { if (k == n) { k = 1; } else { k++; } //光标在顶部时,直接显示前四首歌 if (k == 1) { num = new int[] {1, 2, 3, 4}; } //向下移动时,判断移动后的光标与数组最后一个数的大小,大于则需要翻页 else if (k > num[3]) { //数组中每个数加1代表向下翻页 for (int j = 0; j < 4; j++) { num[j] = num[j] + 1; } } } } //依次打印数组中四个数 for (int i = 0; i < 4; i++) { System.out.print(num[i] + " "); } System.out.println();//换行 } System.out.println(k);//最后打印光标位置 } } }#萌新求指导#