結構體-Problem G: 編寫函數:誰能上春晚? (Append Code)

Problem G: 編寫函數:誰能上春晚? (Append Code)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 6665 Solved: 2790
[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 5
Jack 91 92 93 94 95
Tom 85 84 83 82 81
Mary 92 92 92 92 92
Smith 73 73 73 73 73
Sample Output
Jack 93.00
Mary 92.00
Tom 83.00
HINT

Append Code
append.c,

#include<stdio.h>
#include<string.h>
typedef struct
{
      int score[10];//選手的10個得分,得分與評委一一對應
      double aver;//選手的平均分//aver不是自己平時定義的ave...
      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 i,j,k,sum=0,t;
    for(i=0;i<M;i++)//個人裏的得分,以排序去掉最高分最低分
        for(j=0;j<N;j++)
            for(k=0;k<N-j-1;k++)
        {
            if(peo[i].score[k]>peo[i].score[k+1])//遞增排序
            {
                t=peo[i].score[k];
                peo[i].score[k]=peo[i].score[k+1];
                peo[i].score[k+1]=t;
            }
        }
    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 temp;//因爲要交換整組數據,所以用choice定義一個temp
    for(i=0;i<M;i++)
        for(j=0;j<M-i;j++)
        if(peo[j].aver<peo[j+1].aver)
    {
        temp=peo[j];//不是隻換peo[i].aver 是換peo[i]
        peo[j]=peo[j+1];
        peo[j+1]=temp;
    }
    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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章