MP3游標位置/華為機試(C/C++)
阿新 • • 發佈:2018-12-12
題目描述
MP3 Player因為螢幕較小,顯示歌曲列表的時候每屏只能顯示幾首歌曲,使用者要通過上下鍵才能瀏覽所有的歌曲。為了簡化處理,假設每屏只能顯示4首歌曲,游標初始的位置為第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
程式碼:
//第六十二題 MP3游標位置 #include<iostream> #include<string> using namespace std; void Short(string str, int n) { int initial = 1, current = 1; int len = str.length(); for (int i = 0; i < len; i++) { if (str[i] == 'U') { if (current == 1) current = n; else current--; } else if (str[i] == 'D') { if (current == n) current = 1; else current++; } } for (int i = 1; i < n; i++) cout << i << " "; cout << n << endl; cout << current << endl; } void Long(string str, int n) { int initial = 1, current = 1; int len = str.length(); for (int i = 0; i < len; i++) { if (str[i] == 'U') { if (initial == 1 && current == 1) { current = n; initial = n - 3; } else if (initial == current) { current--; initial--; } else current--; } else if (str[i] == 'D') { if (initial == n - 3 && current == n) { current = 1; initial = 1; } else if (initial == current - 3) { current++; initial++; } else current++; } } for (int i = initial; i != initial + 3; i++) cout << i << " "; cout << initial + 3 << endl; cout << current << endl; } int main() { int n; while (cin >> n) { string str; cin >> str; if (n <= 4) Short(str, n); else Long(str, n); } return 0; }