题解 | #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);//最后打印光标位置
        }
    }
}

#萌新求指导#
全部评论

相关推荐

感觉今年拿到大厂实习offer的人很多,光是身边同学室友都是好几个offer。由此可见,秋招得有多卷
小浪_Coding:必须卷的起飞, 应该比25更卷一点, 25已经是哀声一片了, 26会更难一点, 现在还有`很多25未找到的
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务