1 条题解

  • 0
    @ 2026-10-26 10:13:15

    思路与算法

    逐行读入姓名、体温和咳嗽标记。当体温大于等于37.5且咳嗽标记为1时,立即输出姓名并把计数加一。所有病人处理后再输出总计数。体温按题面float读取,37.5可被二进制浮点精确表示。

    正确性说明

    处理前i人后,已输出的名字恰是其中同时满足体温阈值与咳嗽条件的病人,顺序为输入顺序,计数等于输出人数。初始i=0成立。下一人满足两个条件时追加姓名并加一,不满足时不改,故不变量继续成立。全部处理完成后名字和最终人数都正确。即使同名病人重复出现,也按独立输入记录计数。

    复杂度

    每条姓名最多8个字符,扫描n人总时间O(n),输出不超过n个姓名。代码流式读取,不保存全部记录,额外空间O(1),当前姓名长度有8的常数界。初始化计数为0需O(1)。n小于200。

    易错点

    阈值包含等于37.5;两个条件为且,不是或。先按输入顺序输出姓名,再输出人数;无人满足时只输出0。原题未给出体温的人体常见范围,数据与标程不擅自增加该限制。

    参考代码(C++11)

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        int count = 0;
        for (int i = 0; i < n; ++i) {
            string name;
            float temperature;
            int cough;
            cin >> name >> temperature >> cough;
            if (temperature >= 37.5f && cough == 1) {
                cout << name << '\n';
                ++count;
            }
        }
        cout << count << '\n';
    }
    
    • 1

    信息

    ID
    1701
    时间
    1000ms
    内存
    64MiB
    难度
    入门
    标签
    递交数
    1
    已通过
    1
    上传者