学生成绩排序

题目描述:
总成绩是按平时成绩和考试成绩加一块的,平时成绩占30%,考试成绩占70%。(平时成绩和考试成绩均为100)
按照总成绩排下序,总成绩相同的看考试成绩,考试成绩相同的看平时成绩,都相同的看姓名。(成绩按从大到小,姓名按字典序)。
输入描述:
先输入一个整数n,代表有n个学生,接下来有n行,(0<n<30)
每行有一个字符串和两个实数,其中包括学生的姓名,平时成绩和考试成绩。
输出描述:
按他们的总成绩从大到小输出,每行包括学生姓名,平时成绩,考试成绩和总成绩。
代码:

#include<iostream>
#include <set>  //set集合容器头文件
#include <string>   //string容器头文件
#include <cstdio>//使用c语言中的语句
using namespace std;
struct Student  //定义一个结构体类型,(名字,平时分,考试分,总分为一个组合数据)
{
    string name;    //学生名字
    double pf;  //该学生的平时分
    double kf;  //该学生的考试分
    double zf;  //该学生的总分
    bool operator <(const Student &a) const //自己设计一个排序方式进行数据排序
    {
        if(a.zf!=zf)    //先比较总分
            return a.zf<zf; //返回两者中的大值(结构体中"<"返回大值,正好相反)
        else if(a.kf!=kf)   //总分相等比较考试分
            return a.kf<kf; //返回大值
        else if(a.pf!=pf)   //考试分相等比较平时分
            return a.pf<pf; //返回大值(从大到小)
        else    //平时分相等比较名字
            return a.name>name; //(名字按字典序)从小到大
    }
};
int main()
{
    int n,Kf,Pf,i;//定义变量
    string c;   //创建string类型的c
    Student student;    //学生类的变量名student
    multiset<Student> s;    //创建多重集合容器s(里面元素为学生类型)
    cin>>n;输入总共有几组数据
    while(n--)
    {
        cin>>c;//输入名字
        cin>>Pf>>Kf;//输入平时分考试分
        student.name=c;
        student.pf=Pf;
        student.kf=Kf;
        student.zf=Pf*0.3+Kf*0.7;   //总成绩的计算
        s.insert(student);  //把学生信息插入到多重集合容器中
    }
    multiset<Student>::iterator it; //定义迭代器变量
    for(it=s.begin();it!=s.end();it++)//用迭代器访问s中元素
    {
        cout<<(*it).name;//输出学生名字
        printf(" %.2lf %.2lf %.2lf\n",(*it).pf,(*it).kf,(*it).zf);
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值