题解 | 复数集合

复数集合

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

优先队列:默认大根堆,重载运算符的比较规则有点绕

#include<stdio.h>
#include<string>
#include<queue>
using namespace std;
struct Complex {
    int a;
    int b;
    Complex(int a_, int b_) {
        a = a_;
        b = b_;
    }
};

//因为默认的比较规则只能比较int和double类型,故自定义运算符,重载 < 号
//注意:(a<b)为真或(a>b)为真,都是a(左边那个)输了,谁被判定为输(返回 true),谁就要被挤到下面去
bool operator<(Complex l, Complex r) {
    //比较复数模
    if (l.a * l.a + l.b * l.b < r.a * r.a + r.b * r.b) {
        return true;//复数模最大的排前,l输了
    } else if ((l.a * l.a + l.b * l.b == r.a * r.a + r.b * r.b) && l.b > r.b) {
        return true;//复数模相等时,l.b输了
    } else {
        return false;//小根堆
    }
}
int main() {
    int n;
    char arr[100];
    string action;
    priority_queue<Complex> myqueue;//定义一个优先队列
    scanf("%d", &n);
    while (n--) {
        scanf("%s", arr);
        action = arr;

        if (action == "Pop") {
            if (myqueue.empty()) {//空
                printf("empty\n");
            } else { //不空
                printf("%d+i%d\n", myqueue.top().a, myqueue.top().b);
                myqueue.pop();
                printf("SIZE = %d\n", myqueue.size());
            }
        } else if (action == "Insert") {
            int a, b;
            scanf("%d+i%d", &a, &b);//格式化输入
            Complex c(a, b);
            myqueue.push(c);
            printf("SIZE = %d\n", myqueue.size());

        }

    }
    return 0;

}

计算机复试机试(王道版) 文章被收录于专栏

收录王道2026年计算机复试机试的(课程)代码题解,仅供个人学习参考

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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