题解 | #MP3光标位置#

MP3光标位置

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

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

int main() {
    int n, len;
    string s;
    cin >> n >> s;
    len = s.size();
    int loc = 0;
    // 歌曲总数小于等于4
    if (n <= 4) {
        vector<int> songs(n, 0);
        for (int i = 1; i <= n; i++) {
            songs[i - 1] = i;
        }
        for (int i = 0; i < len; i++) {
            if (s[i] == 'U') {
                if (loc == 0) {
                    loc = n - 1;
                } else {
                    loc--;
                }
            } else if (s[i] == 'D') {
                if (loc == n - 1) {
                    loc = 0;
                } else {
                    loc++;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            cout << songs[i] << " ";
        }
        cout << endl;
        cout << songs[loc] << endl;
    } else {
        // n > 4 的情况
        vector<int> songs(4);
        for (int i = 1; i <= 4; i++) {
            songs[i - 1] = i;
        }
        for (int i = 0; i < len; i++) {
            if (s[i] == 'U') {
                if (loc == 0 && songs[loc] == 1) {
                    loc = 3;
                    for (int j = 0; j < 4; j++) {
                        songs[j] += n - 4;
                    }
                } else if (loc == 0 && songs[loc] != 1) {
                    for (int j = 0; j < 4; j++) {
                        songs[j] -= 1;
                    }
                } else {
                    loc--;
                }
            } else if (s[i] == 'D') {
                if (loc == 3 && songs[loc] == n) {
                    loc = 0;
                    for (int j = 0; j < 4; j++) {
                        songs[j] = j + 1;
                    }
                } else if (loc == 3 && songs[loc] != n) {
                    for (int j = 0; j < 4; j++) {
                        songs[j] += 1;
                    }
                } else {
                    loc++;
                }
            }
        }
        for (int i = 0; i < 4; i++) {
            cout << songs[i] << " ";
        }
        cout << endl;
        cout << songs[loc] << endl;
    }

    return 0;
}
// 64 位输出请用 printf("%lld")

本题目逻辑复杂但是实现简单,主要按照模块化的思想分别实现功能即可。

全部评论

相关推荐

头像
11-26 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务