![024c737c6b2936fbc65fdb4da796e8e7.png](https://i-blog.csdnimg.cn/blog_migrate/6c9edf590d59b8112e26b54cceda311d.png)
![ad03ecc5154ddf048f78397a3d91694b.png](https://i-blog.csdnimg.cn/blog_migrate/783ce871501a5e7299b176dffb3a9946.png)
【题目描述】
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。
【输入】
共2行,第一行为过往病人的数目n(0
【输出】
按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。
【输入样例】
10
1 11 21 31 41 51 61 71 81 91
【输出样例】
20.00%
20.00%
20.00%
40.00%
说明
主要考查一维数组。
题目概述
对于题目的输入样例,第一行的10代表有10个病人,第二行共有10个数字,代表10个病人的年龄。根据0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。
思路分析
对于输入数据,每一组年龄段包含首尾两个数字,例如0-18岁是包含0岁和18岁。其中输入样例中,0-18岁共有2人,那么有:
2÷10×100=20%
上述就是关于某一组年龄段患病人数占总患病人数的比例的计算方法。而本题的关键是如何计算每一组年龄段患病人数。
对于一维数组应存储n个患病人数的年龄还是每一组年龄段的人数,都是可以的,本题解将使用第二种方法。
使用循环输入n个年龄,每循环一次输入一个年龄,用int类型变量存储,代码如下:
其中一维数组a共有4个元素,依次存储4个年龄段的患病人数。变量age中文翻译为【年龄】,用于在循环中存储输入的n个年龄。
上面代码中,每循环一次输入一个年龄,如果不对变量age进行统计,那么下一次循环输入下一个病人的年龄时,就会覆盖上一次病人的年龄,所以在输入年龄给变量age时,应立即对age进行判断和统计。根据4个年龄段,只要符合某个年龄段,对应一维数组的元素+1。代码如下:
对于一维数组a的4个元素:
a[0]存储0-18岁年龄段病人的总数
a[1]存储19-35岁年龄段病人的总数
a[2]存储36-60岁年龄段病人的总数
a[3]存储61岁以上年龄段病人的总数
经过上述循环统计后,n个病人已完成分类统计,最后使用一个循环计算并输出4个年龄段患病人数占总患病人数的比例。共有4个年龄段,对应一维数组a的4个元素a[0]-a[3],根据上述给定的公式求解,代码如下:
注意保留小数点后两位数字,并且每输出一个年龄段的结果应换一行。最后的“%”以字符或字符串的形式输出即可。
数据类型:病人数目是整数,所有变量、数组可选int类型,最后输出的是浮点型数值,可以进行强制类型转换,或像代码一样乘以一个浮点数100.0,而不是100,因为100.0是浮点数,那么整个结果就会变成浮点数。
运行结果
参考代码 - C++
#include
#include
using namespace std;
int main(){
int a[4] = {0}, age, n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> age; // 输入年龄
if (age <= 18) a[0]++; // 分类统计
else if (age >= 19 && age <= 35) a[1]++;
else if (age >= 36 && age <= 60) a[2]++;
else a[3]++;
}
for (int i = 0; i 4; i++) // 输出结果
{
cout <2);
cout <100.0 / n <"%" <endl;
}
return 0;
}
END
注:题目来源于网络,转载于《信息学奥赛一本通(C++版)在线评测系统》,点击下方的【阅读原文】即可打开该题的链接。
题解属于本微信公众号【大神编程】原创。