PS:此題滿分,可參考java
描述: | MP3 Player由於屏幕較小,顯示歌曲列表的時候每屏只能顯示幾首歌曲,用戶要經過上下鍵才能瀏覽全部的歌曲。爲了簡化處理,假設每屏只能顯示4首歌曲,光標初始的位置爲第1首歌。c++
如今要實現經過上下鍵控制光標移動來瀏覽歌曲列表,控制邏輯以下:app
光標在第一首歌曲上時,按Up鍵光標挪到最後一首歌曲;光標在最後一首歌曲時,按Down鍵光標挪到第一首歌曲。測試 其餘狀況下用戶按Up鍵,光標挪到上一首歌曲;用戶按Down鍵,光標挪到下一首歌曲。ui 2. 歌曲總數大於4的時候(以一共有10首歌爲例):spa
特殊翻頁:屏幕顯示的是第一頁(即顯示第1 – 4首)時,光標在第一首歌曲上,用戶按Up鍵後,屏幕要顯示最後一頁(即顯示第7-10首歌),同時光標放到最後一首歌上。一樣的,屏幕顯示最後一頁時,光標在最後一首歌曲上,用戶按Down鍵,屏幕要顯示第一頁,光標挪到第一首歌上。指針
通常翻頁:屏幕顯示的不是第一頁時,光標在當前屏幕顯示的第一首歌曲時,用戶按Up鍵後,屏幕從當前歌曲的上一首開始顯示,光標也挪到上一首歌曲。光標當前屏幕的最後一首歌時的Down鍵處理也相似。code 其餘狀況,不用翻頁,只是挪動光標就行。blog
|
題目類別: | 字符串,循環,函數,指針 |
難度: | 中級 |
分數: | 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 }