1 条题解

  • 0
    @ 2025-4-8 15:31:32

    题解

    本题的核心是根据每个节食者的起始体重节食天数,计算出节目当天的体重,然后按照体重从高到低对节食者进行排序并输出姓名。

    代码(c++)

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    // 定义节食者结构体
    struct Dieter {
        std::string name;
        int daysOnDiet;
        int startingWeight;
        int currentWeight;
    
        Dieter(const std::string& n, int d, int s) : name(n), daysOnDiet(d), startingWeight(s) {
            currentWeight = startingWeight - daysOnDiet;
        }
    };
    
    // 比较函数,用于按当前体重降序排序
    bool compare(const Dieter& a, const Dieter& b) {
        return a.currentWeight > b.currentWeight;
    }
    
    int main() {
        std::string line;
        bool firstSet = true;
    
        while (std::cin >> line) {
            if (line == "START") {
                std::vector<Dieter> dieters;
                while (std::cin >> line && line != "END") {
                    std::string name = line;
                    int days, startWeight;
                    std::cin >> days >> startWeight;
                    dieters.emplace_back(name, days, startWeight);
                }
    
                // 按当前体重降序排序
                std::sort(dieters.begin(), dieters.end(), compare);
    
                // 如果不是第一个数据集,输出一个空行
                if (!firstSet) {
                    std::cout << std::endl;
                }
                firstSet = false;
    
                // 输出排序后的节食者姓名
                for (const auto& dieter : dieters) {
                    std::cout << dieter.name << std::endl;
                }
            }
        }
    
        return 0;
    }
    

    代码解释:

    结构体 Dieter:用于存储每个节食者的姓名、节食天数、起始体重和当前体重。在构造函数中计算当前体重。 比较函数 compare:用于按当前体重降序排序。 主函数 main: 读取输入,直到文件结束。 当遇到 “START” 时,开始处理一个新的数据集。 读取节食者信息,创建 Dieter 对象并存储在向量中。 当遇到 “END” 时,对向量中的节食者按当前体重降序排序。 输出排序后的节食者姓名,数据集之间用空行分隔。

    • 1

    信息

    ID
    1219
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    1
    上传者