題目連結
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15?tpId=37&tqId=21287&tPage=4&rp=&ru=/ta/huawei&qru=/ta/huawei/question-ranking
題目描述
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
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int n;
string s;
while (cin >> n >> s){
int point = 1;
int now = 1;
if (n <= 3){
for (int i = 1; i < n; i++){
cout << i << " ";
}
cout << n << endl;
for (int i = 0; i < s.length(); i++){
if (s[i] == 'U'){
if (point == 1){
point = n;
}
else{
point--;
}
}
else if (s[i] == 'D'){
if (point == n){
point = 1;
}
else{
point++;
}
}
}
cout << point << endl;
}
else{
for (int i = 0; i < s.length(); i++){
if (s[i] == 'U'){
if (point == 1){
point = n;
now = 4;
}
else{
if (now != 1){
point--;
now--;
}
else{
point--;
}
}
}
else if (s[i] == 'D'){
if (point == n){
point = 1;
now = 1;
}
else{
if (now != 4){
point++;
now++;
}
else{
point++;
}
}
}
}
switch (now){
case 1:cout << point << " " << point + 1 << " " << point + 2 << " " << point + 3 << endl << point << endl;break;
case 2:cout << point - 1 << " " << point << " " << point + 1 << " " << point + 2 << endl << point << endl;break;
case 3:cout << point - 2 << " " << point - 1 << " " << point << " " << point + 1 << endl << point << endl;break;
case 4:cout << point - 3 << " " << point - 2 << " " << point - 1 << " " << point << endl << point << endl;break;
}
}
}
return 0;
}