首页 > 试题广场 >

MP3光标位置

[编程题]MP3光标位置
  • 热度指数:121553 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。

现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:

  1. 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。

光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。

其他情况下用户按Up键,光标挪到上一首歌曲;用户按Down键,光标挪到下一首歌曲。

2. 歌曲总数大于4的时候(以一共有10首歌为例):


特殊翻页:屏幕显示的是第一页(即显示第1 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。

一般翻页:屏幕显示的不是第一页时,光标在当前屏幕显示的第一首歌曲时,用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。光标当前屏幕的最后一首歌时的Down键处理也类似。

其他情况,不用翻页,只是挪动光标就行。

数据范围:命令长度,歌曲数量
进阶:时间复杂度:,空间复杂度:

输入描述:

输入说明:
1 输入歌曲数量
2 输入命令 U或者D



输出描述:

输出说明
1 输出当前列表
2 输出当前选中歌曲

示例1

输入

10
UUUU

输出

7 8 9 10
7
头像 雷姆的心动男孩
发表于 2022-01-13 14:26:36
保姆级别的代码分享,虽然不是很简洁。 刚开始思路根本不清晰,看了大佬们的解法自己重构了一个,几番调整总算全部通过,分享一下。 n<5的情况比较简单,只用确定光标位置,没有翻页操作,不做分析。 n>4的情况分析如下: 问题点:如果确定当前页面的 4 首 展开全文
头像 江南好___
发表于 2021-12-09 22:35:15
描述 输入描述: 输入说明: 1 输入歌曲数量 2 输入命令 U或者D 本题含有多组输入数据! 输出描述: 输出说明 1 输出当前列表 2 输出当前选中歌曲 示例 输入: 10 UUUU 输出: 7 8 9 10 7 知识点:数组,模拟 难度:⭐⭐⭐ 题解 方法一:模拟 图解: 解题思路: 模拟 展开全文
头像 牛牛鸭
发表于 2021-01-30 17:04:53
while True: try: n = int(input()) index = 0 #光标所在位置 start = 0 #显示起始坐标 control = input() l = [i for i 展开全文
头像 呆喵挠琴
发表于 2021-12-02 14:50:38
题目的主要信息: MP3每页只能显示4首歌曲,光标初始的位置为第1首歌,通过上下键控制光标移动来浏览歌曲列表。有以下几种情况: 特殊翻页:屏幕显示的是第一页且光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页,同时光标放到最后一首歌上; 一般翻页:屏幕显示的不是第一页时,光标在当前屏幕显示的第 展开全文
头像 人生苦短,但求成长
发表于 2022-02-10 15:24:28
while True: try: n = int(input()) str_input = input() # 总数小于等于4时 if n <= 4: # 当前选中歌曲 now = 1 for c in str_i 展开全文
头像 好运+1
发表于 2022-02-09 11:17:29
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); whil 展开全文
头像 想吃火锅的猪猪是我的神
发表于 2022-03-22 10:32:59
#include<stdio.h> int main() { int n; scanf("%d",&n); char str[100]; scanf("%s",str); int cursor=1; if(n<=4)//判断n 展开全文
头像 牛客天字一号仙女
发表于 2022-04-13 10:51:05
let num = parseInt(readline()); let str = readline().split(''); // 声明存储当前列表和选中歌曲的变量 let menu = []; let se = 1; // 根据输入的命令分别处理赋值 if(num<=4){ men 展开全文
头像 牛客310152520号
发表于 2022-07-08 19:15:40
一次遍历,很简单的解法 字面意思,MP3屏幕同时显示4首歌的列表,按上/下键,光标上/下移1次 故此题需要解决2个问题 1.每次发生按键操作,更新光标位置 2.记录可能发生的列表变动 光标位置随操作变动,变量记录即可; 显示列表,由于屏幕只显示4首歌,因 展开全文
头像 读书不觉已春深
发表于 2020-08-19 10:56:22
1)光标上移下移是下标减1加1来实现。边界情况是直接跳到最大值最小值。2)max是记录着mp3 当前界面最大值。 def helper(cur,n,order): max_ = 1 for s in order: if s == 'U' and cur == 1: 展开全文

问题信息

难度:
384条回答 20792浏览

热门推荐

通过挑战的用户

查看代码