java题目HJ64 MP3光标位置

描述

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

 

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

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

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

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

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

 

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

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

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

数据范围:命令长度1\le s\le 100\1s100 ,歌曲数量1\le n \le 150\1n150 
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n) 

输入描述:

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

输出描述:

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

示例1

输入:
10
UUUU
输出:
7 8 9 10

 

 

 1 import java.util.*;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6             while(sc.hasNext()) {
 7                 int n = sc.nextInt();
 8                 String s = sc.next();
 9                 char[] c = s.toCharArray();
10                 int current=1; //当前指示的值
11                 int index =1;  //指针在当前页位置
12                 StringBuffer sf = new StringBuffer();
13                 for(int i =0; i <c.length;i++) {
14                     if(n<=4) { //n小于等于4时
15                         if(c[i] =='U' && current == 1) {
16                             current = n;
17                         } else if(c[i] =='D' && current == n) {
18                             current = 1;
19                         } else if(c[i] == 'U') {
20                             current = current -1;
21                         } else if(c[i] == 'D') {
22                             current = current +1;
23                         }
24                     } else {
25                         //n大于4时
26                         if(c[i] =='U' && current == 1) {
27                             current = n;
28                             index =4;
29                             sf.delete(0,sf.length());
30                             sf.append(current-3 + " ").append(current-2+" ").append(current-1+" ").append(current); 
31                         } else if(c[i] =='D' && current == n) {
32                             current = 1;
33                             index =1;
34                             sf.delete(0,sf.length());
35                             sf.append(current + " ").append(current+1 + " ").append(current+2 + " ").append(current+3);
36                         } else if(c[i] == 'U' && index != 1) { //不用翻页,当前也值不变,index-1
37                             current = current -1; 
38                             index = index -1;
39                         } else if(c[i] == 'U' && index ==1) {  //需要翻页,值发生变化,index不变
40                             current = current -1;
41                             sf.delete(0,sf.length());
42                             sf.append(current + " ").append(current+1+" ").append(current+2+" ").append(current+3); 
43                         } else if(c[i] == 'D' && index != 4) {  //不用翻页,当前也值不变,index+1
44                             current = current +1; 
45                             index =index +1;
46                         } else if(c[i] == 'D' && index == 4) { //需要翻页,值发生变化,index不变
47                             current = current +1;
48                             sf.delete(0,sf.length());
49                             sf.append(current-3 + " ").append(current-2+" ").append(current-1+" ").append(current);
50                         }
51                     }
52                 }
53                 if(n<=4){
54                     for(int i =1;i<=n;i++)
55                     System.out.print(i+" ");
56                 }
57                 System.out.println(sf);
58                 System.out.println(current);
59                 
60             }
61         }
62 }

 

posted @ 2022-03-12 19:52  海漠  阅读(83)  评论(0编辑  收藏  举报