【PAT乙级】1102 教超冠军卷 (20 分) C语言实现

“教育超市”是拼题 A 系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找出教育超市所有试卷中的销量(即购买人次)冠军和销售额冠军。

输入格式:

输入首先在第一行中给出一个正整数 N(≤10^4),随后 N 行,每行给出一份卷子的独特 ID (由小写字母和数字组成的、长度不超过8位的字符串)、单价(为不超过 100 的正整数)和购买人次(为不超过 10^6 的非负整数)。

输出格式:

在第一行中输出销量冠军的 ID 及其销量,第二行中输出销售额冠军的 ID 及其销售额。同行输出间以一个空格分隔。题目保证冠军是唯一的,不存在并列。

输入样例:

4
zju007 39 10
pku2019 9 332
pat2018 95 79
qdu106 19 38

输出样例:

pku2019 332
pat2018 7505

华丽的分割线

代码实现:

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

typedef struct paper {
    char id[10];
    int price;
    int person;
} Paper;

int main() {
    int n;
    if (scanf("%d", &n) == 1) {
        // 初始化销量冠军 a && 初始化销售额冠军 b
        Paper a = { {0}, 0, 0 }, b = { {0}, 0, 0 };
        char id[10] = {0};
        int price, person;

        for (int i = 0; i < n; i++) {
            if (scanf("%s %d %d", id, &price, &person) == 3) {
                // 销量冠军 a;销量可能为 0 的情况
                if (a.person <= person) {
                    memcpy(a.id, id, sizeof(char) * 10);
                    a.price = price;
                    a.person = person;
                }

                // 销售额冠军 b
                int product = price * person;
                if (b.price * b.person <= product) {
                    memcpy(b.id, id, sizeof(char) * 10);
                    b.price = price;
                    b.person = person;
                }
            }
        }

        // 打印输出
        printf("%s %d\n", a.id, a.person);
        printf("%s %d\n", b.id, b.price * b.person);
    }

    return 0;
}
posted @ 2022-05-26 09:24  夏夜星空晚风  阅读(44)  评论(0编辑  收藏  举报