华为上机测试题(MP3光标移动-java)

PS:此题满分,可参考

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

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

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

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

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

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

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

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

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

题目类别: 字符串,循环,函数,指针
难度: 中级
分数: 100
运行时间限制: 无限制
内存限制: 无限制
阶段: 应聘考试
输入:
第一行输入参数为歌曲总数目M(0 < M < 255)

第二行输入为用户操作,D表示Down键,U表示UP,D和U可以随意组合。测试用例中用户的输入保证合法性,不需要校验;

例如:

10

DDDD

表示10首歌曲,用户按了4个Down键。

输出:
显示MP3屏幕上当前显示的4首歌曲,光标所在歌曲需要使用[]括起来;

例如:

2

3

4

[5]

样例输入:
10
DDDD
样例输出:
2
3
4
[5]
答案提示:
  1 import java.util.Scanner;
  2
  3 public class Main {
  4
  5     private static final String LINE_SEPARATOR = System.getProperty("line.separator");
  6
  7     public static void main(String[] args) {
  8
  9         Scanner cin = new Scanner(System.in);
 10         String strNum = cin.nextLine();
 11         String strButton = cin.nextLine();
 12
 13         cin.close();
 14
 15         showMp3(strNum, strButton);
 16
 17     }
 18
 19     private static void showMp3(String strNum, String strButton) {
 20
 21         int musicNum = Integer.parseInt(strNum);
 22         char[] ch = strButton.toCharArray();
 23         int len = ch.length;
 24
 25         if(musicNum <= 0 || musicNum >= 255)
 26         {
 27             return;
 28         }
 29
 30         int music = 1;
 31         int start = 1;
 32         StringBuilder sb = new StringBuilder();
 33
 34         for(int i = 0; i < len; i++)
 35         {
 36             switch(ch[i])
 37             {
 38             case ‘D‘:
 39                 music++;
 40                 if(music == musicNum+1)
 41                 {
 42                     music = 1;
 43                     start = 1;
 44                 }
 45                 else if(music-start > 3)
 46                 {
 47                     start++;
 48                 }
 49                 break;
 50             case ‘U‘:
 51                 music--;
 52                 if(music == 0)
 53                 {
 54                     music = musicNum;
 55                     start = musicNum-3;
 56                 }
 57                 else if(start > music)
 58                 {
 59                     start = music;
 60                 }
 61                 break;
 62             default:
 63                 return;
 64             }
 65         }
 66
 67         if(musicNum < 4)
 68         {
 69             start = 1;
 70             for(int i = 0; i < musicNum; i++, start++)
 71             {
 72                 if(music == start)
 73                 {
 74                     sb.append("["+music+"]");
 75                 }
 76                 else
 77                 {
 78                     sb.append(start);
 79                 }
 80
 81                 if(musicNum-1 != i)
 82                 {
 83                     sb.append(LINE_SEPARATOR);
 84                 }
 85             }
 86         }
 87         else
 88         {
 89             for(int i = 0; i < 4; i++, start++)
 90             {
 91                 if(music == start)
 92                 {
 93                     sb.append("["+music+"]");
 94                 }
 95                 else
 96                 {
 97                     sb.append(start);
 98                 }
 99
100                 if(3 != i)
101                 {
102                     sb.append(LINE_SEPARATOR);
103                 }
104             }
105         }
106
107         System.out.println(sb.toString());
108     }
109
110 }
时间: 2024-08-07 08:24:02

华为上机测试题(MP3光标移动-java)的相关文章

华为上机测试题(及格分数线-java)

PS:自己写的,自测试OK,供大家参考. /* 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数:(2) 保证至少有60%的学生及格:(3) 如果所有的学生都高于60分,则及格线为60分输入:输入10个整数,取值0~100输出:输出及格线,10的倍数输入样例:61 51 49 3020 10 70 80 90 99输出样例:50*/ import java.util.Scanner; public class passScore { static

华为上机测试题(地铁换乘-java)

PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次).地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18地铁线B(直线)经过车站:B1

华为上机测试题(水仙花数升级版-java)

PS:这题满分100,没有做对,大家帮忙看看问题在哪 /* * 题目:水仙花数升级版  * 描述: 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153)给你A和B,求[A,B]区间内有多少个水仙花数 题目类别: 循环,查找,枚举,位运算 难度: 中级 分数: 100 运行时间限制: 无限制 内存限制: 无限制 阶段: 应聘考试 输入: 两个正整数,用空格隔开,保证数字都小于等于1000000. 输出: 一个数

华为上机测试题(Excel表格纵列字母数字转换-java)

PS:这是我刚做的一道题,题目不难,满分60,得分40,大家看看哪里有问题,欢迎提意见,感谢! /* * 题目:Excel表格纵列字母数字转换 * 描述: 在Excel中列的编号为A-Z,AA-AZ,BA-BZ.....CZB.....,请实现一个函数要求满足以下功能,将编号进行修改, * 如A-Z为1-26,然后翻转为两位,AA为27,AB为28.....ZZ为702,然后翻转为3位,AAA=703,AAB=704... 输入的字符串最长只有4. 题目类别: 字符串 难度: 初级 分数: 60

华为上机测试题(求亮灯数量-java)

PS:自己写的,自测试OK,供大家参考. /* 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着.有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着.注:电灯数和学生数一致

华为上机测试题(数字字符串转二进制-java)

PS:此题刚做完,满分,可参考 /*  * 题目:数字字符串转二进制 * 描述: 输入一串整数,将每个整数转换为二进制数,如果倒数第三个Bit是“0”,则输出“0”,如果是“1”,则输出“1”. 题目类别: 位运算 难度: 初级 分数: 60 运行时间限制: 10 Sec 内存限制: 128 MByte 阶段: 应聘考试 输入: 一串整数,长度小于1024,整数以空格隔开 输出: 1/0的整数串,空格隔开 样例输入: 240 0 样例输出: 0 0 答案提示: */ 1 import java.

华为上机练习题--统计各小写字符出现的次数

题目: 手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出.提示可以用map 例子:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用动脑,直接简单粗暴的顺势而上 直接上代码: import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TestCharAcount

华为上机练习题--计算表达式

题目: 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形. 例如:  输入:3+8×2/9-2 输出:2 函数原型 public int getMyRet(String str) 分析: 这个题目略显高端啊, 像我这种非专业的自学者,还真没有学过编译原理之类的课程, 要自己实现一个这种小型的编译器是非常困难啊, 所幸的是这个题目是用java来实现的, 而我本身也曾经看到过用java来实现这类的问题, 这类问题有一种方法就是实现类编译器功能的函数, 这个我是驾驭不

华为上机练习题--重复字符过滤

题目: 请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串"abacacde"过滤结果为"abcde". 示例 输入:"deefd"        输出:"def" 输入:"afafafaf"     输出:"af" 输入:"pppppppp"     输出:"p" 分析: 看到这种类似的相同字符过滤,使