问题 3200 --选三好学生(程序填空)

3200: 选三好学生(程序填空)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 1080  解决: 380
[提交][状态][命题人:]

题目描述

问题描述:小王是班长。学期末到了,班级要评选三名三好学生,但是人数太多数据量大,非常麻烦,请您帮忙设计一个程序,输出同学们的排序,再输出三名三好学生的名单。

要求:排序前一行空出,按三门成绩总分排序,同分情况下按姓名顺序排序(按字典序逆序排序),输出学生姓名和总分;名单与排序间空一行,按样例输出:每个名字占一行,三好学生不超过三个人。另外,受到过处分的同学不能参与三好学生评比(只有处分栏为“no”的同学才能参与评比),但是一起排序。

#include<cstdio>
#include<algorithm>
#include<string.h>
#include<cstdlib>
using namespace std;
struct stu
{
    char name[255];
    char xuehao[255];
    int gaoshu;
    int chengxu;
    int yingyu;
    char chufen[10];
    int zongfen;
};
bool cmp(stu a,stu b)
{
    if(a.zongfen!=b.zongfen)
    return a.zongfen>b.zongfen;
    if(_____(1)______)
    return 1;
    return 0;
}
int main()
{
    int n,k=0;
    char chufen[10]="no";
    scanf("%d",&n);
    stu*arr=(stu*)malloc(sizeof(stu)*n);
    for(int i=0;i<n;i++)
    {
        scanf("%s%s%d%d%d%s",arr[i].name,arr[i].xuehao,&arr[i].gaoshu,&arr[i].chengxu,&arr[i].yingyu,&arr[i].chufen);
        _____(2)______;
    }
    sort(arr,arr+n,cmp);
    for(int i=0;i<n;i++)
    {
        printf("%s %d\n",arr[i].name,arr[i].zongfen);
    }
    printf("\n");
    for(int i=0;_____(3)______;i++)
    {
        if(strcmp(arr[i].chufen,chufen)==0)
        {
            printf("%s %s\n",arr[i].name,arr[i].xuehao);
            k++;
        }
    }
    _____(4)_____;
    arr=NULL;
    return 0;
}

输入

学生人数,整数n<=50n名学生的姓名(中间没有空格)、学号、高数成绩、c语言成绩、英语成绩、处分情况。

输出

各个学生的排序(有学生姓名和三门总分,中间以空格隔开),空一行输出三好学生名单。

样例输入
Copy
5
wt 201901010101 94 92 50 no
st 201901010102 80 80 80 no
wzc 201901010103 88 66 99 yes
sjy 201901010104 100 100 100 no
lr 201906060606 100 89 90 yes
样例输出
Copy
sjy 300
lr 279
wzc 253
st 240
wt 236

sjy 201901010104
st 201901010102
wt 201901010101

提示

来源

[提交][状态]