HJ64MP3光标位置

一、分析题目
屏幕大小固定,通过上下键浏览。
(1)当 总数<=4,此时无翻页。
除特殊情况都可正常移动,i移动就行
特殊情况:i为1,按up,要移动到最后一个,i为4;
i为4,按down,要移动到第一个,i为1
(2)当总数>4,假设为10
翻页:
一般翻页 :比如当前(4,5,6,7)i处于4,
按up 屏幕显示(3,4,5,6)i处于3;
比如当前为(4,5,6,7)i处于7
按down 屏幕显示(5,6,7,8)i处于8
特殊翻页:
i为1,按up,要移动到最后一个,i为10;
i为10,按down,要移动到第一个,i为1
无翻页:
正常移动i
————————————————
关键点:
在本体中长度固定为4,可以看作是一个有限制长度的屏幕,只是这里需要把无法显示的所有内容都放到长度无限的页面上,通过对向上和向下操作进行优化。
通过模拟可知,1、2、3、4这四个数中循环,假设当前位置为i,对于 U 操作指令,光标向上移动一格后的位置为 (i-1-1+n) % n+1
光标向后移动一格后的位置为 i%n+1
二、代码

import java.util.Scanner;

public class Main {
    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);
        }
    }

    public static void parseCmd(String commands, int n) {
        // 页面的起始位置
        int start = 1;
        // 页面的末位置
        int end = Math.min(n, 4);
        // 光标的位置, 三个位置都是从1开始
        int index = 1;
        for(int i = 0; i < commands.length(); i++) {
            // 根据向上移动和向下移动的公式,光标位置的变化
            if(commands.charAt(i) == 'U') {
                index = (index-1-1+n) % n + 1;
            } else if(commands.charAt(i) == 'D') {
                index = index % n + 1;
            }
            // 判断滑动窗口的位置是否需要改变
            if(index < start) {
                // 光标在窗口之上
                start = index;
                end = start + 3;
            } else if(index > end){
                // 光标在窗口之下
                end = index;
                start = end - 3;
            }
        }
        // 输出窗口内容
        for(int i = start; i <= end; i++) {
            System.out.print(i + " ");
        }
        System.out.println();
        // 打印当前光标
        System.out.println(index);
    }
}




全部评论
这是牛客上的题?
点赞 回复 分享
发布于 2022-06-18 20:00

相关推荐

点赞 评论 收藏
分享
迷茫的大四🐶:好一个误闯天家,我也想闯一闯
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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