KY196 复数集合 && KY27 查找学生信息

一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。

输入描述:
输入有多组数据。 每组输入一个n(1<=n<=1000),然后再输入n条指令。

输出描述:
根据指令输出结果。 模相等的输出b较小的复数。 a和b都是非负数。

示例1
输入:
3
Pop
Insert 1+i2
Pop

输出:
empty
SIZE = 1
1+i2
SIZE = 0

// 题目链接  https://www.nowcoder.com/practice/abdd24fa839c414a9b83aa9c4ecd05cc?tpId=67&tqId=29643&tPage=1&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking

#include<stdio.h>
#include<queue>
#include<string>

using namespace std;

struct info {
    int re;
    int i;
};

bool operator < (info l, info r) {
    // l的模小于r的模 触发交换  即true 触发交换
    return l.re * l.re + l.i * l.i < r.re * r.re + r.i * r.i;
}

int main() {
    int n;
    scanf("%d", &n);
    // priority_queue 相当于大根堆
    priority_queue<info> q;
    for (int i = 0; i < n; i++) {
        char str[30];
        scanf("%s", str);
        string s = str;
        if (s == "Pop") {
            if (q.empty()) {
                printf("empty\n");
            } else {
                printf("%d+i%d\n", q.top().re, q.top().i);
                q.pop();
                printf("SIZE = %d\n", q.size());
            }
        } else if(s == "Insert"){
            int re, i;
            scanf("%d+i%d", &re, &i);
            info e;
            e.re = re;
            e.i = i;
            q.push(e);
            printf("SIZE = %d\n", q.size());
        }
    }

    return 0;
}

注: scanf(“%s”,arr) 读取到 空格 停止

---------------------------------------------------------------------------

描述
输入N个学生的信息,然后进行查询。
输入描述:
输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下: 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下: 02 03 01 04
输出描述:
输出M行,每行包括一个对应于查询的学生的信息。 如果没有对应的学生信息,则输出“No Answer!”

输入:
4
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
5
02
03
01
04
03

输出:
02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19

// 题目链接 https://www.nowcoder.com/practice/fe8bff0750c8448081759f3ee0d86bb4?tpId=60&tqId=29499&tPage=2&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking

#include<cstdio>
#include<string>
#include<map>

using namespace std;

struct info {
    string name;
    string c;
    int age;
};


int main() {
    int n, m;
    map<string, info> ma;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        char num[1000];
        char name[20];
        char sex[20];
        int age;
        scanf("%s %s %s %d", num, name, sex, &age);
        string numstr = num;
        info f;
        f.name = name;
        f.c = sex;
        f.age = age;
        // 像map 中添加键值对(两种插入方式)
        ma.insert(pair<string, info>(numstr, f));
        //ma[numstr] = f;
    }
    scanf("%d", &m);
    for (int i = 0; i < m; ++i) {
        char num[20];
        scanf("%s", num);
        string numstr = num;
        if (ma.find(numstr) != ma.end()) {
            printf("%s %s %s %d\n", numstr.c_str(), ma[numstr].name.c_str(), ma[numstr].c.c_str(), ma[numstr].age);
        } else {
            printf("No Answer!\n");
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值