华为上机测试题(MP3光标移动-java)
2014-09-29 20:55
351 查看
PS:此题满分,可参考
描述: | MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第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] |
答案提示: |
import java.util.Scanner; public class Main { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static void main(String[] args) { Scanner cin = new Scanner(System.in); String strNum = cin.nextLine(); String strButton = cin.nextLine(); cin.close(); showMp3(strNum, strButton); } private static void showMp3(String strNum, String strButton) { int musicNum = Integer.parseInt(strNum); char[] ch = strButton.toCharArray(); int len = ch.length; if(musicNum <= 0 || musicNum >= 255) { return; } int music = 1; int start = 1; StringBuilder sb = new StringBuilder(); for(int i = 0; i < len; i++) { switch(ch[i]) { case 'D': music++; if(music == musicNum+1) { music = 1; start = 1; } else if(music-start > 3) { start++; } break; case 'U': music--; if(music == 0) { music = musicNum; start = musicNum-3; } else if(start > music) { start = music; } break; default: return; } } if(musicNum < 4) { start = 1; for(int i = 0; i < musicNum; i++, start++) { if(music == start) { sb.append("["+music+"]"); } else { sb.append(start); } if(musicNum-1 != i) { sb.append(LINE_SEPARATOR); } } } else { for(int i = 0; i < 4; i++, start++) { if(music == start) { sb.append("["+music+"]"); } else { sb.append(start); } if(3 != i) { sb.append(LINE_SEPARATOR); } } } System.out.println(sb.toString()); } }
相关文章推荐
- 华为OJ(MP3光标移动)
- 华为上机Java实现
- 2012 年 华为上机题 java 约瑟夫环
- 华为校园招聘上机试题 Java实现(二)
- 华为上机测试题(求亮灯数量-java)
- 华为上机测试题(地铁换乘-java)
- Java简单图形编辑器 放置、移动和擦除方块 鼠标事件测试程序 Java核心技术 事件处理
- 华为上机测试题(Excel表格纵列字母数字转换-java)
- 华为上机题汇总----java
- 华为上机题汇总----java
- 华为上机测试题(表达式运算-java)
- 一道华为校园招聘软件研发上机测试题及我个人解法
- 华为java上机试题
- java上机 第十一周 任务1 算术测试小软件
- 华为校园招聘上机试题 Java实现(一)
- 华为Java上机题
- 两道华为上机题目解答(Java语言)
- 华为Java上机题 2013年 [广州]
- 华为校园招聘上机试题Java实现(二)
- 华为上机测试题(大数相乘-java)