题解 | #MP3光标位置#

#include <bits/stdc++.h>

using namespace std;

int main(){
    //输入
    int musicNum = 0;
    string command = "";
    cin >> musicNum;
    cin >> command;
    
    //处理命令
    if(musicNum <= 4){
        int curMusicPos = 1; //当前光标的一个位置
        for(char ch : command){
            if(ch == 'U') curMusicPos--;
            else curMusicPos++;
        }
        
        //输出
        for(int i = 1; i <= musicNum; i++){
            cout << i << " ";
        }
        cout << endl;
        // 这里有一点要注意的就是有可能最后的位置超过了musicNum,要取一个模,变到这个范围内
        if(curMusicPos >= 0){
            cout << (curMusicPos) % musicNum << endl; //
        }
        else{
            cout << (musicNum + curMusicPos + 1) % musicNum << endl;
        }
    }
    
    else{ //musicNum > 4
        int curMusicPos = 1; //当前光标的一个位置
        int head = 1, end = 4; //head当前列表的头部是哪一首歌曲, end当前列表尾部是哪一首歌曲
        
        for(char ch : command){
            if(ch == 'U') {
                curMusicPos--;
                //如果光标比第一首歌曲的位置都要小
                if(curMusicPos < 1){ //跳到最后一页的位置上面
                    curMusicPos = musicNum; //更新光标位置
                    head = musicNum - 4 + 1; //更新列表头部
                    end = musicNum; //更新列表尾部
                }
                else{ //如果光标没有小于1
                    if(curMusicPos < head){ //如果当前位置要比当前的列表头还要小,说明要更新列表了
                        head = curMusicPos; //更新列表头部
                        end--; //更新列表尾部
                    }
                }
            }
            // ch == 'D'
            else{ 
                curMusicPos++;
                //如果光标比最后一首歌曲的位置都要大
                if(curMusicPos > musicNum){ //跳到第一页的位置上面
                    curMusicPos = 1; //更新光标位置
                    head = 1; //更新列表头部
                    end = 4; //更新列表尾部
                }
                else{ //如果光标没有大于musicNum
                    if(curMusicPos > end){ //如果当前位置要比当前的列表尾还要大,说明要更新列表了
                        end = curMusicPos; //更新列表尾部
                        head++; //更新列表头部
                    }
                }
            }
           
        }
         
        //输出
        for(int i = head; i <= end; i++){
            cout << i << " ";
        }
        cout << endl;
        cout << curMusicPos << endl;
    }
      
    return 0;
}
全部评论

相关推荐

frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
找工作时遇到的神仙HR
点赞 评论 收藏
分享
Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
昨天 13:47
门头沟学院 Java
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务