1 条题解

  • 0
    @ 2025-8-24 21:20:51

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wpy233
    你弱归你弱,py比你弱。 stO 所有关注我的巨佬 Orz

    搬运于2025-08-24 21:20:50,当前版本为作者最后更新于2019-07-07 10:02:32,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    结构体排序严重好评

    众所周知,sort是一个特别好的东西,但当排序面对的对象是结构体时,sort就不能自动排了,还需要手写填一个comp函数。

    comp函数框架:

    bool comp(结构体名称 x,结构体名称 y)
    {
    	按照题目的要求进行比较,并返回true或false;
    }
    

    在这道题中,comp的框架完全可以这样写:

    bool comp(xx x,xx y)
    {
    	if(x.zf!=y.zf)//如果两个变量的总分不相同
    		return x.zf>y.zf;//直接比较,总分大的在前面
    	else
    		if(x.yw!=y.yw)//如果两个学生总分相同、语文分数不相同
    			return x.yw>y.yw;//语文分数大的排在前面
    		else
    			return x.bh<y.bh;//如果总分相同、语文分数也相同,编号小的在前面
    }
    

    再加上一些头文件定义、输入输出、初始化什么的,这题就AC了!

    #include <bits/stdc++.h>//万能头文件
    using namespace std;
    struct xx{//定义结构体“学生”类型
    	int yw;//语文分数
    	int ss;//数学分数
    	int yy;//英语分数
    	int zf;//总分
    	int bh;//编号
    }a[305];//可以直接定义,注意定义结构体是后括号后一定要加上分号
    int n;
    bool comp(xx x,xx y)
    {
    	if(x.zf!=y.zf)
    		return x.zf>y.zf;
    	else
    		if(x.yw!=y.yw)
    			return x.yw>y.yw;
    		else
    			return x.bh<y.bh;
    }//comp结构体排序,上文已经解释过
    int main()
    {
        cin>>n;//输入
        for(int i=1;i<=n;i++)
        {
        	cin>>a[i].yw>>a[i].ss>>a[i].yy;//输入第i位学生的语文、数学、英语
        	a[i].bh=i;//存储学生的编号
        	a[i].zf=a[i].yw+a[i].ss+a[i].yy;//定义总分
    	}
    	sort(a+1,a+n+1,comp);//排序
    	for(int i=1;i<=5;i++)
    		cout<<a[i].bh<<" "<<a[i].zf<<endl;//循环输出
        return 0;
    }
    • 1

    信息

    ID
    95
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    3
    已通过
    1
    上传者