Problem A: 编写函数:谁能上春晚? (Append Code)


Problem A: 编写函数:谁能上春晚? (Append Code)

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 5088   Solved: 2147
[ Submit][ Status][ Web Board]

Description


科大电视台将在2013年2月10日举办一场大型春节晚会。为了选拔好节目,科大电视台将于近日举办一次“直通科大春晚”的节目,届时将有M名选手和N名评委参加,并选拔排名前三甲的选手参加春晚。

选手的排序原则是:对每名选手,N个评委的评分需要去掉一个最高分和一个最低分,然后求其平均分,按照平均分进行递减排序。假定任意2名选手的平均得分都不相同。

现在,已知每位评委给每名参数选手的评分,需要你来编写一个程序,输出能够参加春晚的三名选手的名字和得分。

-----------------------------------------------------------------------------

至少编写两个函数完成程序:

原型:int inputChoice(Choice peo[],int M,int N);

功能:输入M名选手的信息。选手信息存储在数组peo[]中,M和N分别是选手数和评委数。

原型:int sort(Choice peo[],int M,int N);

功能:用于对M名选手根据平均得分排成递减序。选手信息存储在数组peo[]中,M和N是选手数和评委数。

函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

“Append Code”中用到如下结构体定义:

typedef struct
{
      int score[10];//选手的10个得分,得分与评委一一对应
      double aver;//选手的平均分
      char name[81];//选手的姓名
} Choice;

Input

输入的第一行是M和N,表示有M名选手和N名评委。其中3<M<31,3<N<11。

之后是M行输入,每行以选手的名字为开头(选手名字不超过80个字符,且不含任何空白符),之后是一个空格以及N个得分,得分两两之间用一个空格隔开。

Output

输出为三行,每行是一个能够上春晚的选手的名字和得分,名字和得分用一个空格隔开。输出顺序为冠军、亚军和季军。

Sample Input

4 5Jack 91 92 93 94 95Tom 85 84 83 82 81Mary 92 92 92 92 92Smith 73 73 73 73 73

Sample Output

Jack 93.00Mary 92.00Tom 83.00

HINT

Append Code

append.c

美腻的晓梅小姐姐周末问的一道题(开森),然后我周末debug了一个小时多的代码还被吴教主喷了......(菜呀......)

结果周二上完课一看作业题......这道题出来了......

排序上面,我还是比较建议,qsort吧,譬如,某只煤球冒泡伪越界......


#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int score[10];//选手的10个得分,得分与评委一一对应
    double aver;//选手的平均分
    char name[81];//选手的姓名
}Choice;
int inputChoice(Choice peo[],int M,int N)//输入名字和分数
{
    int i,j;
    for (i=0; i<M; i++)
    {
        scanf("%s",peo[i].name);
        for (j=0; j<N; j++)
        {
            scanf("%d",&peo[i].score[j]);
        }
 
    }
    return 0;
}
int sort(Choice peo[],int M,int N)
{
    int j,i,temp,k,sum=0;
    for (k=0; k<M; k++)//冒泡排序法
    {
        for (i=0; i<N-1; i++)
        {
            for (j=0; j<N-i-1; j++)
            {
                if (peo[k].score[j]>peo[k].score[j+1])
                {
                    temp=peo[k].score[j];
                    peo[k].score[j]=peo[k].score[j+1];
                    peo[k].score[j+1]=temp;
                }
            }
        }
 
    }
    for (i=0; i<M; i++)
    {
        for (j=1; j<N-1; j++)
        {
            sum+=peo[i].score[j];
        }
        peo[i].aver=(double)sum/(N-2);//制类型转换使得两边数据类型相同
        sum=0;
    }
    Choice pr;
    for (i=0; i<M-1; i++)
    {
        for (j=0,k=0; j<M-i; j++,k++)
        {
            if(peo[k].aver<peo[k+1].aver)
            {
                pr=peo[k];//整个结构体中的成员都进行交换
                peo[k]=peo[k+1];
                peo[k+1]=pr;
            }
        }
    }
   return 0;
 
}
int main()
{
    Choice peoples[30];
    int M,N,i;
    scanf("%d%d",&M,&N);
    inputChoice(peoples,M,N);
    sort(peoples,M,N);
    for (i=0; i<3; i++)
        printf("%s %.2lf\n",peoples[i].name,peoples[i].aver);
    return 0;
}
/**************************************************************
    Problem: 1220
    User: 201701060928
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:748 kb
****************************************************************/


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值