HJ64-MP3翻页-新建对象模拟 – 三郎君的日常

Java基础 / 面试 · 2022年5月28日 0

HJ64-MP3翻页-新建对象模拟

解题思路:

模拟整个过程处理。情况分为歌曲数小于等于4和大于4两种情况,每种情况都要考虑特殊翻页、一般翻页、其他。用n表示歌曲总数,first表示当前页面的第一首歌,num表示当前选中的歌。

算法流程

  • 当歌曲数小于等于4时:特殊向上翻页,移动光标到最后一首歌;特殊向上翻页,移动光标到第一首歌;一般向上翻页,光标向上移动一格;一般向下翻页,光标向下移动一格;
  • 当歌曲数大于4时:特殊向上翻页,光标移动到最后一首歌,最后一页第一首歌为n-3;特殊向下翻页,光标移动到第一首歌,第一页第一首歌为1;一般向上翻页,光标向上移一格,当前页第一首歌和光标位置相同;一般向下翻页,光标向下移一格,当前页第一首歌位置也向下移一格;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String ops = sc.next();

        // 模拟翻页
        Page page = new Page(n);
        for (int i = 0; i < ops.length(); i++) {
            if ('U' == ops.charAt(i)) {
                page.up();
            } else {
                page.down();
            }
        }

        // 输出结果
        for (int i = page.top; i <= page.floor; i++) {
            System.out.print(i);
            if (i != page.floor) {
                System.out.print(" ");
            }
        }
        System.out.println();
        System.out.println(page.cur);
    }

}

// 模拟翻页对象
class Page {

    int top;
    int floor;
    final int n;
    int cur;

    public Page(int n) {
        this.n = n;
        cur = top = 1;
        floor = Math.min(n, 4);
    }

    public void up() {

        cur --;
        if (cur == 0) {
            cur = n;
        }

        if (n > 4) {
            if (cur == n) {
                floor = n;
                top = n - 3;
            } else if (cur < top) {
                top --;
                floor --;
            }
        }
    }

    public void down() {

        cur ++;
        if (cur == n + 1) {
            cur = 1;
        }

        if (n > 4) {
            if (cur == 1) {
                top = 1;
                floor = 4;
            } else if (cur > floor) {
                top ++;
                floor ++;
            }
        }
    }
}