年龄与疾病

GitHub跳转原题关系图返回列表

按年龄上界分类计数,再除以总人数输出四组百分比。

OJ: noi_openjudge

题目 ID: ch0106-05

难度:入门

标签:模拟分类讨论python

日期: 2026-07-30 23:01

题意

将患者年龄分为 00-18181919-35353636-6060 和不小于 6161 四组,输出每组所占百分比。

思路

从小到大判断年龄上界即可确定唯一分组。记录四组人数后,用 count * 100 / patient_count 计算比例并格式化为两位小数。

代码

Python代码

python
patient_count = int(input())
ages = map(int, input().split())
groups = [0, 0, 0, 0]

for age in ages:
    if age <= 18:
        groups[0] += 1
    elif age <= 35:
        groups[1] += 1
    elif age <= 60:
        groups[2] += 1
    else:
        groups[3] += 1

for count in groups:
    print(f"{count * 100 / patient_count:.2f}%")

C++代码

cpp
#include <cstdio>
int n;
int age[205]={0};
int main(){
    int i,t;
    scanf("%d",&n);
    for (i=1;i<=n;i++){
        scanf("%d",&t);
        age[t]++;
    }
    int a,b,sum;
    a = 0,b=18,sum=0;
    for(i=a;i<=b;i++){
        sum += age[i];
    }
    printf("%0.2lf%%\n",sum*1.0 / n * 100);
    a = 19,b=35,sum=0;
    for(i=a;i<=b;i++){
        sum += age[i];
    }
    printf("%0.2lf%%\n",sum*1.0 / n * 100);
    a = 36,b=60,sum=0;
    for(i=a;i<=b;i++){
        sum += age[i];
    }
    printf("%0.2lf%%\n",sum*1.0 / n * 100);
    a = 61,b=200,sum=0;
    for(i=a;i<=b;i++){
        sum += age[i];
    }
    printf("%0.2lf%%\n",sum*1.0 / n * 100);
    return 0;
}

复杂度

时间复杂度为 O(N)O(N),额外空间复杂度为 O(1)O(1)

总结

连续区间分类时,按边界递增的 if / elif 链最容易保证不重不漏。