我感觉我这个容易理解

MP3光标位置

https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15

1.一共有4个格子对应4首歌,格子位置为0,1,2,3。只有在第一首往上翻(U)时,格子位置对应到3(歌曲数小于4对应到歌曲数-1),当最后一首往下翻(D)时,格子位置对应到0。在格子位置为0且非第一首歌,或者在格子位置为3且非最后一首歌,往上或往下翻时无需改动对应的格子位置。如果是其他情况,该加加,该减的减。

2.一共有n首歌。从1到n。默认是位置是1,U和D就对应减加。只有在第一首往上翻(U)时,位置对应到n,当最后一首往下翻(D)时,位置对应到1。其他就是加1减1。

3.通过知道的格子位置和对应的歌曲,进行上下补全即可

import java.util.ArrayList;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //1 输入歌曲数量:1≤n≤150
        int n = in.nextInt();
        // 在当前页的格子位置,默认第一格(共4个格子)
        int pageIndex = 0;

        // 对应的歌曲,默认第一首
        int index = 1;

        //2 输入命令 U或者D
        String string = in.next();
        char[] charArray = string.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            char c = charArray[i];
            // 第一首歌
            if (c == 'U' && index == 1) {
                index = n;
                // 注意:跳到最后一页时,歌曲列表一定是满的,也就是说,即使按照4首为一组,
                // 当最后一组不足4首歌时,从第一首歌往上翻页会进行补全为4首歌。除非总歌曲数<4
                if(n < 4){
                    pageIndex = n - 1;
                }else {
                    pageIndex = 3;
                }
                continue;
            }
            //
            if (c == 'D' && index == n) {
                index = 1;
                pageIndex = 0;
                continue;
            }

            if (c == 'U') {
                if (pageIndex != 0) {
                    pageIndex--;
                }
                index--;

            }

            if (c == 'D') {
                if (pageIndex != 3) {
                    pageIndex++;
                }
                index++;
            }
        }

        // 补全其他格子的歌曲
        int[] currentArr = new int[4];
        for (int i = 0; i < 4; i++) {
            if (i == pageIndex) {
                currentArr[i] = index;
                // 根据知道的第几格和对应的歌曲进行上下补全
                int upIndex = index;
                int downIndex = index;
                for (int j = pageIndex - 1; j >= 0; j--) {
                    // 往上面补全格子肯定没问题
                    currentArr[j] = --upIndex;
                }
                for (int j = pageIndex + 1; j < 4; j++) {
                    // 往下注意达到最大了,但是格子未满的情况。比如3首歌时
                    if (downIndex == n) {
                        break;
                    }
                    currentArr[j] = ++downIndex;
                }
            }
        }

        // 结果打印
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < currentArr.length; i++) {
            // 注意:如果格子(一共4格)未满的情况。比如总歌曲数为1~3
            if (currentArr[i] == 0){
                break;
            }

            if (i == currentArr.length - 1){
                builder.append(currentArr[i]);
                continue;
            }
            builder.append(currentArr[i]).append(" ");
        }
        System.out.println(builder);
        System.out.println(index);
    }
}

全部评论

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
07-08 13:48
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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