赞
踩
题目描述
医院采样了某临床病例治疗期间的白细胞数量样本 n 份,用于分析某种新抗生素对该病例的治疗效果。为了降低分析误差,要先从这 n 份样本中去除一个数值最大的样本和一个数值最小的样本,然后将剩余 n−2 个有效样本的平均值作为分析指标。同时,为了观察该抗生素的疗效是否稳定,还要给出该平均值的误差,即所有有效样本(即不包括已扣除的两个样本)与该平均值之差的绝对值的最大值。
现在请你编写程序,根据提供的 n 个样本值,计算出该病例的平均白细胞数量和对应的误差。
输入格式
输入的第一行是一个正整数 n(2<n≤300),表明共有 n 个样本。
以下共有 n 行,每行为一个浮点数,为对应的白细胞数量,其单位为 109/L。数与数之间以一个空格分开。
输出格式
输出为两个浮点数,中间以一个空格分开。分别为平均白细胞数量和对应的误差,单位也是 109/L。计算结果需保留到小数点后 2 位。
题目思路很清晰 —— 循环录入数据,且在录入的同时更新最大值与最小值,计算总和;循环结束后总和减去最值,计算平均值;最后一个循环计算最大差值
但是题目漏给了一个条件 —— 最值不唯一,如果最后一层循环的判断条件为“是否是最值”,则会导致删除多个最值,不符合题目 “ 去除一个最大值和一个最小值 ”的条件
通过如上分析,应当添加两个新变量,用于记录最大值与最小值的下标;通过小标过滤数组的方法就避免了重复去除~
当然,如果使用C++的 sort函数 就不用怎么麻烦了 @-@
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int n;
- scanf("%d",&n);
- // 防止越界
- double arr[310];
- double maxx = -1,minn = 10000;
- // 标记变量
- int maxIndex = 0,minIndex = 0;
- // 初始化和 计算平均值
- double sum = 0;
- for(int i = 0;i<n;i++){
- // 录入数据
- scanf("%lf",&arr[i]);
- sum+=arr[i];
- // 更新最值
- maxx = maxx>arr[i]?maxx:arr[i];
- // 更新索引
- maxIndex = maxx>arr[i]?maxIndex:i;
- minn = minn<arr[i]?minn:arr[i];
- minIndex = minn<arr[i]?minIndex:i;
- }
- // 减去最值
- double average = (sum-minn-maxx)/(n-2);
- // 找到最大误差
- double dis = -1;
- for(int i = 0;i<n;i++){
- if(i!=maxIndex&&i!=minIndex){
- if(dis<fabs(arr[i]-average)) dis = fabs(arr[i]-average);
- }
- }
- printf("%.2f %.2f",average,dis);
- return 0;
-
- }
题目描述
给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。
假设 Fmax(Fmax≤100000)Fmax(Fmax≤100000)是数组里最大的数,那么我们只统计 {0,1,2…Fmax}{0,1,2…Fmax} 里每个数出现的次数。
输入格式
第一行 n 是数组的大小。1≤n≤100000。
紧接着一行是数组的 n 个元素。
输出格式
按顺序输出每个数的出现次数,一行一个数。如果没有出现过,则输出 0。
对于例子中的数组,最大的数是 3,因此我们只统计 {0,1,2,3} 的出现频数。
此题需要定义一个计数器数组,记录每个数组出现的次数
- #include<stdio.h>
- int main()
- {
- int n;
- scanf("%d",&n);
- // 计数器数组初始化为0
- int count[100002] = {0};
- // 初始化最大值
- int maxx = 0;
- for(int i = 0;i<n;i++){
- // 录入数据
- int number;
- scanf("%d",&number);
- //最大值更新
- maxx = maxx>number?maxx:number;
- // 计数器数组对应改变
- count[number]++;
- }
- // 输出
- for(int i = 0;i<=maxx;i++){
- printf("%d\n",count[i]);
- }
- return 0;
- }
但是初始数组定义长度过大,会造成一定程度的空间浪费;所以动态分配空间的思维就很重要~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。