题解 | #HJ064 MP3光标位置#

MP3光标位置

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

import java.util.Scanner;

/**
 * HJ64 MP3光标位置
 */
public class HJ064 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            String cmd = sc.next();
            parseCmd(cmd, n);
        }
        sc.close();
    }

    public static void parseCmd(String str, int n) {
        // 页面数据大小,默认4
        int pageSize = 4;
        // 页面的歌曲大小,最大为4
        if (n < pageSize) {
            pageSize = n;
        }
        // 根据指令移动current光标,可以当作歌曲编号
        int current = 1;
        // 记录光标在页面中的位置pageIndex,即歌曲编号
        int pageIndex = 1;
        for (int i = 0; i < str.length(); i++) {
            // 上移
            if (str.charAt(i) == 'U') {
                // 特殊情况,当前光标在歌曲中第一首
                if (current == 1) {
                    // 从第一行上移,移动到最后的歌曲
                    current = n;
                    // 光标在页面的位置,
                    pageIndex = pageSize;
                    // 一般情况,即光标不在第一行
                } else {
                    // 光标上移
                    current--;
                    if (pageIndex != 1) {
                        pageIndex--;
                    }
                }
            } else {
                // 下移
                // 已经到最后一首歌曲,光标到第一首歌曲
                if (current == n) {
                    current = 1;
                    pageIndex = 1;
                } else {
                    // 非最后一行,则光标下移即可
                    current++;
                    if (pageIndex != pageSize) {
                        pageIndex++;
                    }
                }
            }
        }
        // 计算光标前后数字个数
        int next = pageSize - pageIndex;
        int pre = pageSize - 1 - next;
        // 打印页面
        String page = "";
        // 从当前光标前一个元素开始向前打印
        for (int i = pre; i > 0; i--) {
            page += (current - i) + " ";
        }
        page += current + " ";
        for (int i = 1; i <= next; i++) {
            page += (current + i) + " ";
        }
        // 去除尾部空格
        page = page.substring(0, page.length() - 1);
        System.out.println(page);
        // 打印当前光标
        System.out.println(current);
    }
}
全部评论

相关推荐

昨天 17:45
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-19 20:55
因为业务不是喜欢的,所以就没去,现在实习工作也有很多dirtywork,很后悔,怎么能舔回这个offer啊
flmz_Kk:试一试跟hr舔回来,不过保不齐米的活也有很多dirtywork,只能说不要美化自己没走过的路
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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