【day21】每日一题——MP3光标位置

news2024/12/26 17:01:33

MP3光标位置_牛客题霸_牛客网

 这题就是简单的根据它的规则把它的情况都列举出来即可(当然,我第一次写一脸懵逼,所以你现在一脸懵逼没事,看完你就觉得简单了。看完还懵逼,你就多看几遍,然后自己去尝试一下,只要你成功运行了,那你就觉得真的简单~)

这个光标移动,是要根据它的指令来的,玩过mp3都这个那个歌曲显示的效果,

由于屏幕一次只能显示4首歌曲,所以我们要分情况来讨论,歌曲小于等于4首的时候,跟歌曲数目大于4首的时候

咱们先说说歌曲小于等于4首的时候

假设只有4首歌好了,也就是一个数组,数组里面有4歌元素(1,2,3,4),光标的初始位置会是第一首歌,也就是此时光标指向1,我们要是往下Dowm的话,光标会往下移动到2,在Down再移动到3到4,假设现在光标到4了,你再继续Down的话,光标就会跳到1,也就是第一首歌,这个情况对你来说应该不陌生,我想你不了解的就是代码的实现,对吧?不要急,听完慢慢说~

一直Down的情况说完了,我们再说说Up的情况,假设现在光标在1位置,你要是Up一下,光标就跳到最后一首歌曲了,继续Up就会继续向上到3,到2,再到1,这个肯定不难理解是吧,因为现在歌曲数目 <= 4,所以不需要翻页,你在这个情况看屏幕,屏幕是不会变化的,操作的整个过程只是光标在移动~


上述就是歌曲数小于等于4的理解

下面咱们再说说歌曲数目大于4的情况,假设数目为10,歌曲就是1~10

刚开始,光标指向1对不

(1)然后你此时要是Up一下,光标就会跑到最后一首歌对吧,也就是会跑到10的位置,但是,因为这个情况是大于4首歌曲的,屏幕最多只能显示4首歌曲,这时候不仅光标变动,页面也会跟着跳转,在Up之前,你看到的页面是 1  2  3  4,你一Up,页面变成了  10  9  8  7, 然后光标现在指向10位置~

(2)假如现在光标在10位置,屏幕显示10  9  8  7 ,接着你Down一下,光标跳到了1,页面也跟着变化成1  2  3  4,这跟上面的(1)是两种特殊情况:光标在第一首,显示第一页,但是要Up;

光标在最后一首,显示最后一页,但是要Down

(3)假设现在你的光标指向4对吧,此时页面显示是1  2  3  4,你要往下Dowm,那么光标就会跳到5,然后页面的第一行网上顶一行,把1顶掉,把5显示出来~这个你看手机的时候肯定知道的

(4)同上,假设现在光标指向2,页面显示的是  2  3  4  5,然后你一Up,光标跳到1,然后页面会网下顶一行,把上面的1显示出来

你会发现(3)和(4)的情况是:此时光标位置的在第一行,但你要Up;光标位置在第4行,但你要Down(排除了(1)和(2)的情况,互不相干)

(5)排除了上述的情况后就剩下简单的了:光标现在在页面的中间两首歌的其中一种,不管你是Up还是Dowm,只是光标移动,页面不会变化~


下面是代码展示

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String cmd = in.next();
        move(n,cmd);
    }

        public static void move(int n, String cmd){
        if(n <= 4){
            int[] arr = new int[n];
            int mouse = 1;
            for(int i = 0; i < arr.length; i++){
                arr[i] = i + 1;
            }
            for(int i = 0; i < cmd.length(); i++){
                if(mouse == 1 && cmd.charAt(i) == 'U'){
                    mouse = arr[arr.length-1];
                }else if(mouse == arr.length && cmd.charAt(i) == 'D'){
                    mouse = 1;
                }else if(cmd.charAt(i) == 'U'){
                    mouse--;
                }else {
                    mouse++;
                }
            }
            for(int x : arr){
                System.out.print(x + " ");
            }
            System.out.println();
            System.out.println(mouse);

        }else if(n > 4){
            int[] arr = new int[n];
            int mouse = 1;//光标此时位置
            int first = 1;//页面的显示
            for(int i = 0; i < arr.length; i++){
                arr[i] = i + 1;
            }
            //开始遍历cmd
            for(int i =0; i < cmd.length(); i++){
                //此时位于第一页,第一首歌,并且要UP
                if(first == 1 && mouse == 1 && cmd.charAt(i) == 'U'){
                    first = n - 3;
                    mouse = arr[n - 1];
                }else if(first == n - 3 && mouse == arr[n - 1] && cmd.charAt(i) == 'D'){
                    //此时这里表示,位于最后一页,最后一首歌,并且要Down
                    first = 1;
                    mouse = 1;
                }else if(first != 1 && mouse == first && cmd.charAt(i) == 'U'){
                    //这里表示不是第一页,但第一首歌,并且要UP
                    first--;
                    mouse--;
                }else if(first != n - 3 && mouse == first + 3 && cmd.charAt(i) == 'D'){
                    //这里表示不是最后一页,但最后一首歌,并且要Down
                    first++;
                    mouse++;
                }else if(cmd.charAt(i) == 'U'){
                    //这里表示在页面中间的其中一首歌
                    mouse--;
                }else if(cmd.charAt(i) == 'D'){
                    mouse++;
                }
            }
            //遍历完cmd后打印此时的状态
            for(int i = 0; i < 4; i++){
                System.out.print(arr[first - 1 + i] + " ");
            }
            System.out.println();
            System.out.println(mouse);

        }
    }
}

我们去遍历命令行cmd,根据歌曲数目分为两种情况,然后在根据命令行去执行光标移动和页面变化,当命令行遍历完后,就要打印出此时的页面,和光标指向的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++,不废话的宏使用技巧

经典废话 下面的所有内容全是我在欣赏一串代码时发出的疑问&#xff0c;之前对宏的了解不多&#xff0c;导致在刚看到下面的这串代码的时候是“地铁 老人 手机”&#xff0c;具体代码如下&#xff0c;如果有对这里解读有问题的欢迎在评论区留言。 一、预定义宏 编译一个程…

在线就能制作活动邀请函,一键生成链接

今天小编教你如何在线制作一个活动邀请函&#xff0c;不需要下载软件&#xff0c;也不需要编程代码&#xff0c;只需使用乔拓云工具在线一键就能生成活动邀请函和邀请函链接&#xff0c;下面就跟着小编的教学开始学习如何在线制作活动邀请函&#xff01;第一步&#xff1a;打开…

[附源码]java毕业设计SSM归途中流浪动物收容与领养管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

OSPF高级配置——虚接口,NSSA

作者介绍&#xff1a; 作者&#xff1a;小刘在C站 每天分享课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; 夕阳下&#xff0c;是最美的绽放。 目录 一.ospf 虚链路 二.虚链路的目的 三.配置虚链路的规则及特点 四.虚链路的配置&#xff1a; nssa …

HTML小游戏6 —— 《高达战争》横版射击游戏(附完整源码)

&#x1f482; 网站推荐:【神级源码资源网】【摸鱼小游戏】&#x1f91f; 风趣幽默的前端学习课程&#xff1a;&#x1f449;28个案例趣学前端&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且实用的计算机相关知…

奥密克戎 (Omicron) 知多少m?| MedCheExpress

这个冬天 Omicron 已迅速超越其他变种&#xff0c;成为主要的 SARS-CoV-2 毒株&#xff0c;尽管该变体在体内引起的病毒水平与其“竞争对手” Delta 相比更低&#xff0c;但威力不容小觑。 ■ 第五大变异关注病毒株&#xff0c;有何神奇之处&#xff1f; 2021 年 11 月 24 日&…

深度自定义mybatis

> 回顾mybatis的操作的核心步骤 > > 编写核心类SqlSessionFacotryBuild进行解析配置文件 > 深度分析解析SqlSessionFacotryBuild干的核心工作 > > 编写核心类SqlSessionFacotry > 深度分析解析SqlSessionFacotry干的核心工作 > 编写核心类SqlSession &…

【面试官让我十分钟实现一个链表?一个双向带头循环链表甩给面试官】

我们在面试中面试官一般都会让我们现场写代码&#xff0c;如果你面试的时候面试官让你十分钟写一个链表&#xff0c;你是不是懵逼了&#xff1f;十分钟写一个链表&#xff0c;怎么可能&#xff1f;事实上是有可能的&#xff0c;十分钟写出的链表也能震惊面试官。 我们学习单链…

《红楼梦》诗词大全

前言&#xff1a; 博主最近二读红楼&#xff0c;幼时只觉此书开篇便人物繁杂、莺莺燕燕似多混乱&#xff0c;开篇只看黛玉哭闹了几次&#xff0c;便弃书不读&#xff0c;只觉困惑&#xff0c;其何敢称六大奇书或四大名著&#xff1f; 今日书荒&#xff0c;偶然间再次拾起红楼…

3.2 网络协议

0 socket协议 访问 Internet 使用得最广泛的方法&#xff1b;所谓socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff1b;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff1b;Socket接口…

六六大顺 马蹄集

六六大顺 难度&#xff1a;白银 0时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 输入正整数N,输出N以内&#xff08;含N),6的倍数&#xff0c;并且包含6的数字&#xff0c;比如36等。 格式 输入格式&#xff1a;输入整型 输出格式&#xff1a;输出整型&#xff0c;空格分…

SI24R1国产低功耗2.4GHz收发一体射频遥控工控答题卡方案芯片替代NRF24L01+

目录SI24R1简介芯片特性硬件设计参考2.4GHz射频芯片选型参考应用领域SI24R1简介 Si24R1 2.4GHz收发一体芯片量产于2012年&#xff0c;由于其一致性稳定性高、低功耗、远距离、兼容替代NRF24L01&#xff0c;兼容NORDIC 2.4GHz协议等特点&#xff0c;一直广泛应用于各物联网场景…

牛客竞赛每日俩题 - 动态规划2

目录 经典DP - 走方格 走方格2.0 分割回文串 分割回文串 - 回文优化 经典DP - 走方格 不同路径的数目(一)_牛客题霸_牛客网 状态&#xff1a; 子状态&#xff1a;从(0,0)到达(1,0),(1,1),(2,1),...(m-1,n-1)的路径数 F(i,j): 从(0,0)到达F(i,j)的路径数 状态递推&#xff1a…

【23届秋招总结系列】一个普本23届小学弟的秋招总结,上岸金山云开发(云计算方向)

大家好&#xff0c;我是路飞~ 正值秋招收尾阶段&#xff0c;今天很荣幸请来了交流qun小分队里的一位23届本科上岸 金山云开发工程师-云计算方向的同学&#xff0c;给大家分享一下他在秋招过程中的总结和心得体会。 他的博客链接&#xff1a;团子的守护 一、秋招收获 2022.1…

计算机毕业设计SSM大学生创新创业项目活动管理平台【附源码数据库】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【微服务】Nacos服务发现源码分析

&#x1f496;Spring家族及微服务系列文章 ✨【微服务】SpringBoot监听器机制以及在Nacos中的应用 ✨【微服务】Nacos服务端完成微服务注册以及健康检查流程 ✨【微服务】Nacos客户端微服务注册原理流程 ✨【微服务】SpringCloud中使用Ribbon实现负载均衡的原理 ✨【微服务】Sp…

Ubuntu20.04安装k8s v1.21.0

1. 禁用swap分区, 修改网络配置 sudo vim /etc/fstab 把有swap的那一行注释掉即可&#xff0c;如下&#xff1a; 然后执行如下命令 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 EOF …

12.帖子模块——使用peewee创建多表关联的结构,使用Tornado创建查询接口、增加接口

1.模型建立与数据初始化 1.1分析建立表所需要的字段 本次主要是添加一个帖子展示时&#xff0c;所需要的内容&#xff0c;这里就得创建一个mysql的数据表去存储它的内容。 1.2 使用peewee创建多表关联结构Model 模型建立 # forum/models.py # 用于创建数据表模型from peewe…

企业自研业务系统的登录如何添加动态口令,实施MFA双因子认证?

一、背景需求 不少企业因业务需要会自己研发业务系统&#xff0c;为保护业务数据安全&#xff0c;首先要确保能访问到业务数据的人员“身份”安全可信。 企业自研业务系统的账号密码基本是 IT 管理员单独管理维护&#xff0c;员工为了方便记忆&#xff0c;通常设置与其他商采系…

函数绘图仪 MathGrafix 12.1 Crack

函数绘图仪 MathGrafix 12.1 MatheGrafix 12.1于 2022 年 8 月 1 日发布&#xff0c;包含两个新模块&#xff1a; 公式函数模块支持具有一个变量和最多十个参数的函数方程。每个参数都可以使用自动运行的滑块进行调整。 在数据模块中&#xff0c;记录数据后&#xff0c;使用回…