天天看點

華為-MP3光标位置

題目連結

​​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首歌。

現在要實作通過上下鍵控制光标移動來浏覽歌曲清單,控制邏輯如下:

  1. 歌曲總數<=4的時候,不需要翻頁,隻是挪動光标位置。

光标在第一首歌曲上時,按Up鍵光标挪到最後一首歌曲;光标在最後一首歌曲時,按Down鍵光标挪到第一首歌曲。

華為-MP3光标位置

其他情況下使用者按Up鍵,光标挪到上一首歌曲;使用者按Down鍵,光标挪到下一首歌曲。

華為-MP3光标位置

  2. 歌曲總數大于4的時候(以一共有10首歌為例):

特殊翻頁:螢幕顯示的是第一頁(即顯示第1 – 4首)時,光标在第一首歌曲上,使用者按Up鍵後,螢幕要顯示最後一頁(即顯示第7-10首歌),同時光标放到最後一首歌上。同樣的,螢幕顯示最後一頁時,光标在最後一首歌曲上,使用者按Down鍵,螢幕要顯示第一頁,光标挪到第一首歌上。

華為-MP3光标位置

一般翻頁:螢幕顯示的不是第一頁時,光标在目前螢幕顯示的第一首歌曲時,使用者按Up鍵後,螢幕從目前歌曲的上一首開始顯示,光标也挪到上一首歌曲。光标目前螢幕的最後一首歌時的Down鍵處理也類似。

華為-MP3光标位置

其他情況,不用翻頁,隻是挪動光标就行。

輸入描述:

輸入說明:
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;
}