题解 | #MP3光标位置#

MP3光标位置

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

类实现

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class MP3 {
public:
    MP3() = default;
    MP3(const int &num);
    void pressButton(const string &keys);
    void showList();
    void curSong();
private:
    int cursor;
    vector<int> list;    // 歌曲列表
    vector<int> screen;    // 屏幕上显示的歌曲
};

int main() {
    int num;
    cin >> num;
    MP3 oppo(num);
    string keys;
    cin >> keys;
    oppo.pressButton(keys);
    oppo.showList();
    oppo.curSong();
    
    return 0;
}

MP3::MP3(const int &num) {
    for (int i = 1; i <= num; i++) {
        list.push_back(i);
    }
    cursor = list[0];
    for (int i = 1; i <= (num >= 4 ? 4 : num); i++) {
        screen.push_back(i);
    }
}

void MP3::pressButton(const string &keys) {
    for (auto c : keys) {
        if (c == 'U') {
            if (cursor == screen[0]) {    // 若当前光标是屏幕的第一项
                if (screen[0] == list[0]) {    // 若屏幕的第一项是列表第一首歌
                    for (int i = 0; i < screen.size(); i++) {
                        screen[screen.size() - 1 - i] = list[list.size() - 1 - i];
                    }
                    cursor = screen[screen.size() - 1];
                }
                else {
                    for (int i = 0; i < screen.size(); i++) {
                        screen[i] -= 1;
                    }
                    cursor -= 1;
                }
            }
            else {
                cursor -= 1;
            }
        }
        else if (c == 'D') {
            if (cursor == screen[screen.size() - 1]) {    // 若当前光标是屏幕的最后一项
                if (screen[screen.size() - 1] == list[list.size() - 1]) {    // 若屏幕的最后一项是列表最后一首歌
                    for (int i = 0; i < screen.size(); i++) {
                        screen[i] = i + 1;
                    }
                    cursor = screen[0];
                }
                else {
                    for (int i = 0; i < screen.size(); i++) {
                        screen[i] += 1;
                    }
                    cursor += 1;
                }
            }
            else {
                cursor += 1;
            }
        }
    }
}

void MP3::showList() {
    for (auto l : screen) {
        cout << l << " ";
    }
    cout << endl;
}

void MP3::curSong() {
    cout << cursor << endl;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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