基础编程题之MP3

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之MP3相关的知识,希望对你有一定的参考价值。

题目

牛客
在这里插入图片描述

解题思路

这道题虽然描述复杂,但本质很简单,我们只需定义两个变量:first和choose,分别指向一页的第一首歌和选中的歌,然后根据具体的业务逻辑写出不同条件情况下的代码即可。和实际公司工作中的开发类似,具体描述标注其中

代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n;//歌曲数目
    string action;//用户行为
    while(cin>>n>>action)
    {
        int first=1;//表示当前页的第一首歌
        int choose=1;//表示当前页中选中的歌
        if(n<=4)//歌曲<=4的情况
        {
            for(int i=0;i<action.size();i++)
            {
                if(choose==1 && action[i]=='U')//如果选中的是第一首歌并且向上走
                {
                    choose=n;//选中最后一首歌
                }
                else if(choose==n && action[i]=='D')//如果选中的是最后一首歌,并且向下走
                {
                    choose=1;//选中第一首歌
                }
                else if(action[i]=='U')//正常情况向上走
                {
                    choose--;
                }
                else//正常情况向下走
                {
                    choose++;
                }
            }
            for(int i=1;i<=n;i++)
            {
                cout<<i<<" ";
            }
            cout<<endl;
            cout<<choose<<endl;
        }
        else//歌曲>4的情况
        {
            for(int i=0;i<action.size();i++)
            {
                if(first==1 && choose==1 && action[i]=='U')//如果在第一页并且选中了第一页的第一首歌,而且向上翻
                {
                    first=n-3;//指向最后一页的第一个
                    choose=n;
                }
                else if(first==n-3 && choose==n && action[i]=='D')//如果在最后一页并且选中了最后一页的最后一首歌,而且向下翻
                {
                    first=choose=1;
                }
                else if(first!=1 && choose==first && action[i]=='U')//如果不是第一页,选中了本页的第一首歌,那么整体平移
                {
                    first--;
                    choose--;
                }
                else if(first!=n-3 && choose==first+3 && action[i]=='D')//如果不是最后一页,选中了本页的最后一首歌,那么整体平移
                {
                    first++;
                    choose++;
                }
                else if(action[i]=='U')
                {
                    choose--;
                }
                else
                {
                    choose++;
                }
            }
            for(int i=first;i<=first+3;i++)
            {
                cout<<i<<" ";
            }
            cout<<endl;
            cout<<choose<<endl;
            
        }
    }
}

以上是关于基础编程题之MP3的主要内容,如果未能解决你的问题,请参考以下文章

基础编程题之牛客网星际密码

基础编程题之洗牌

前端面试题之手写promise

基础编程题之不用加减乘除做加法

基础编程题之奇数位(偶数位)都是奇数(偶数)

基础编程题之最近公共祖先