hdu 2014 青年歌手大奖赛_评委会打分(数组,调用函数,c语言)

hdu 2014 青年歌手大奖赛_评委会打分

点击做题网站链接

题目描述

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。

Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。

Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。

Sample Input
3 99 98 97
4 100 99 98 97

Sample Output
98.00
98.50

题目难点

1. 使用数组
2. 调用函数

问题解答

#include <stdio.h>
int findMax(int[],int);//声明找到最大值的函数
int findMin(int[],int);//声明找到最小值的函数

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n<2 || n>100) continue;//如果n<2或n>100,则下面步骤全部跳过,再次输入n
        int a[101],sum=0,Max,Min;
        double ave;//平均值是double型的
        for(int i=0;i<n;++i)
        {
            scanf("%d",&a[i]);//依次输入评分
            sum+=a[i];//求所有分数的和(包括最高分和最低分)
        }
        Max=findMax(a,n);//得到最大评分
        Min=findMin(a,n);//得到最小评分
        ave=double(sum-Max-Min)/(n-2);//强行进行数据类型转化求平均分
        printf("%.2lf\n",ave);//注意精度
    }
    return 0;
}

int findMax(int a[],int n)
{
    int t=0;//初始化最大值的下标为0
    for(int i=0;i<n;++i)
    {
        if(a[i]>a[t]) t=i;//如果遍历数列,找到比假设最大值更大的数字,则更改下标为新找到的最大值的下标
    }
    return a[t];//返回找到的最大值
}

int findMin(int a[],int n)
{
    int t=0;//初始化最小值的下标为0
    for(int i=0;i<n;++i)
    {
        if(a[i]<a[t]) t=i;//如果遍历数列,找到比假设最小值更小的数字,则更改下标为新找到的最小值的下标
    }
    return a[t];//返回找到的最小值
}
posted @ 2018-11-01 15:24  Sherry_Yue  阅读(288)  评论(0编辑  收藏  举报