题解 | #MP3光标位置#

MP3光标位置

https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15

分情况讨论

好怀念初中时候用的mp3

#include <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int N = 4;
void do_work_under4(int n,string str);
void do_work_above4(int n,string str);
int main() {
    int n;
    string str;
    while(cin>>n>>str){
        if(n<=4){
            do_work_under4(n,str);
        }
        else{
            do_work_above4(n,str);
        }
    }
    
}
void do_work_under4(int n,string str){
    vector<int>page;
    for(int i = 0;i<n;i++){
        page.push_back(i+1);
    }
    int index = 0;
    for(auto &ch:str){
        if(ch=='U'){
            if(index==0) index=page.size()-1;
            else  index = index-1;
        }
        else{
            if(index==page.size()-1) index = 0;
            else index = index+1;
        }
    }
    for(int &ch:page){
        cout<<ch<<" ";
    }
    cout<<endl;
    cout<<page[index]<<endl;
}
void do_work_above4(int n,string str){
    vector<int>page = {1,2,3,4};
    int last = 3;
    int index = 0;
    for(auto &ch:str){
        if(ch=='U'){
            if(index==0&&page[0]==1){
                index = last;
                page = vector<int>({n-3,n-2,n-1,n});
            }else if(index==0&&page[0]!=1){
                for(int &ch:page){
                    ch--;
                }
            }else{
                //index!=0
                index--;
            }
        }
        else if(ch=='D'){
            if(index==last&&page[index]==n){
                index = 0;
                page = vector<int>({1,2,3,4});
            }else if(index==last&&page[index]!=n){
                for(int &ch:page){
                    ch++;
                }
            }else{
                //index!=last
                index++;
            }
        }
    }
    for(int &ch:page){
        cout<<ch<<" ";
    }
    cout<<endl;
    cout<<page[index]<<endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

new和malloc的区别?c++里new了数组怎么释放?32位系统的指针变量占多大字节?int*呢?空类呢?c++多态?为什么需要虚析构?虚析构实现原理?c++可以不写构造函数吗?编译器默认除了构造还会有什么?深拷贝和浅拷贝区别?智能指针哪个c++版本引入的,作用?用过哪些容器?项目里用了哪些容器?为什么用qlist?qmap什么是key?模板的好处?什么时候会用?设计模式了解哪些?自己写过吗?单例模式怎么写?单例要返回非静态指针类型怎么弄?队列和栈的区别?osi七层以及相应协议?网络层的协议?应用层?一些项目问题...网络加密算法知道哪些?tcp的三次握手四次挥手回收写过吗?写服务器基本模...
AI牛可乐:哇,你分享了好多面试经验呢,听起来你准备得很充分呢!👍 关于你提到的技术问题,我来帮你解答一下吧: 1. `new` 和 `malloc` 的区别?`new` 会自动调用构造函数,而 `malloc` 只负责分配内存。`new` 数组释放时用 `delete[]`,比如 `delete[] myArray;`。 2. 在32位系统中,指针变量通常占4个字节,`int*` 也是如此。 3. 空类的实例通常占1个字节,但具体实现可能不同。 4. C++多态允许我们通过基类指针或引用来调用派生类的函数。需要虚析构是因为基类指针可能指向派生类对象,不使用虚析构可能导致派生类析构函数不被调用。 5. 如果不写构造函数,编译器会提供一个默认构造函数。默认构造函数会进行成员变量的默认初始化。 6. 深拷贝和浅拷贝的区别在于,深拷贝会复制对象的所有字段,包括指向的内存内容;浅拷贝只复制对象的字段值,不复制指向的内存内容。 7. 智能指针是在C++11版本引入的,用于自动管理内存,防止内存泄漏。 8. 常用的容器有 `vector`、`list`、`map` 等。具体使用哪个容器取决于项目需求。 关于你问的其他问题,我简单回答一下: - `QList` 通常用于需要频繁插入和删除的场景。 - `QMap` 的 `key` 是映射表中的键值。 - 模板的好处是提高代码复用性,减少代码冗余。 - 设计模式有很多种,比如单例模式、工厂模式等。单例模式可以通过静态成员函数实现。 现在,悄悄告诉你一个小秘密,点击我的头像,我们可以私信聊天哦~🎉 那么,你平时在项目中都用过哪些容器呢?有没有什么特别的经验或者技巧可以分享的呢?😊
点赞 评论 收藏
分享
lingo12:1.最好加个业务项目,大部分面试官工作以后会更偏重业务 2.实习部分描述一般般,可能hr看到会觉得你产出不够不给你过简历 3.蓝桥杯这些大部分人都有的,不如不写,反而减分项。
点赞 评论 收藏
分享
昨天 18:25
已编辑
南京大学 算法工程师
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务