文章

【GESP】C++一级练习 luogu-B2090, 年龄与疾病

一级综合练习,在一级题目中应该属于小有难度的。

luogu-B2090

题目要求

描述

某医院进行一项研究,想知道某项疾病是否与年龄有关。因此对以往的诊断记录进行整理,统计 0-18 、 19-35 、 36-60、 61 及以上这四个年龄段的患者人数占总患者人数的比例。

输入

输入共有 2 行。

第一行包含一个整数 $N$ ($0 < N \leq 100$),表示总患者人数。

第二行包含 $N$ 个整数,代表这 $N$ 个患者就诊时的年龄。

输出

输出共4行。

第1行包含一个百分数,这个百分数保留小数点后2位,代表0-18岁这个年龄段的患者人数占总患者人数的比例。

第2行包含一个百分数,这个百分数保留小数点后2位,代表19-35岁这个年龄段的患者人数占总患者人数的比例。

第3行包含一个百分数,这个百分数保留小数点后2位,代表36-60岁这个年龄段的患者人数占总患者人数的比例。

第4行包含一个百分数,这个百分数保留小数点后2位,代表61岁及以上这个年龄段的患者人数占总患者人数的比例。

输入样例-1

10
1 11 21 31 41 51 61 71 81 91

输出样例-1

20.00%
20.00%
20.00%
40.00%

输入样例-2

12
10 19 86 94 58 57 34 19 88 69 5 13

输出样例-2

25.00%
25.00%
16.67%
33.33%


题目分析

  • 读取总患者人数$n$的值
  • 初始化四个变量,用于统计不同年龄段的患者人数
  • 在每次循环中,读取当前患者的年龄,并根据年龄段统计患者人数
  • 输出不同年龄段的患者人数占总患者人数的百分比,保留到小数点后2位

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdio>

int main() {
    int n; // 定义整数n,用于存储输入的患者人数
    scanf("%d", &n); // 从输入流中读取n的值
    double a; // 定义浮点数a,用于存储每个患者的年龄
    double ans = 0, bns = 0, cns = 0, dns = 0; // 初始化四个变量,用于统计不同年龄段的患者人数
    for (int i = 1; i <= n; i++) { // 循环n次,处理每个患者的信息
        scanf("%lf", &a); // 从输入流中读取当前患者的年龄
        if (a > 0 && a <= 18) { // 如果年龄在0到18岁之间
            ans += 1; // 统计0-18岁年龄段的患者人数
        } else if (a >= 19 && a <= 35) { // 如果年龄在19到35岁之间
            bns += 1; // 统计19-35岁年龄段的患者人数
        } else if (a >= 36 && a <= 60) { // 如果年龄在36到60岁之间
            cns += 1; // 统计36-60岁年龄段的患者人数
        }
        if (a > 60) { // 如果年龄大于60岁
            dns += 1; // 统计61岁及以上年龄段的患者人数
        }
    }
    // 输出不同年龄段的患者人数占总患者人数的百分比,保留小数点后2位
    printf("%.2f%%\n%.2f%%\n%.2f%%\n%.2f%%", (ans / n * 100), (bns / n * 100),
           (cns / n * 100), (dns / n * 100));
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权