1 条题解
-
0
思路与算法
逐行读入姓名、体温和咳嗽标记。当体温大于等于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