当前位置: 首页 > news >正文

【成绩排序,按原顺依次序输出名次,有相同名次】

有 n 名同学,每名同学有语文、数学、英语三科成绩,你需要按照如下规则对所有同学的成绩从高到低排序:

  1. 比较总分,高者靠前;
  2. 如果总分相同,则比较语文和数学两科的总分,高者靠前;
  3. 如果仍相同,则比较语文和数学两科的最高分,高者靠前;
  4. 如果仍相同,则二人并列。

你需要输出每位同学的排名,如遇 xx 人并列,则他们排名相同,并留空后面的 x−1x−1 个名次。例如,有 33 名同学并列第 11,则后一名同学自动成为第 44 名。

Input

第一行一个整数 NN,表示同学的人数。
接下来 NN 行,每行三个非负整数 ci,mi,eici​,mi​,ei​ 分别表示该名同学的语文、数学、英语成绩。

Output

输出 NN 行,按输入同学的顺序,输出他们的排名。
注意:请不要按排名输出同学的序号,而是按同学的顺序输出他们各自的排名。

Sample 1

InputcopyOutputcopy
6
140 140 150
140 149 140
148 141 140
141 148 140
145 145 139
0 0 0
1
3
4
4
2
6

思路:

1.先按照题目中条件依次写排序规则,名次一样是=时,return true;

2.排出名次后,按此顺序记录下各个同学的名次;

3.判断同名次时,再同时考虑三个因素,与前一个比较,如果三个条件都一样,名次与前一个同学一样;

4.因为要按原来的顺序输出名次,故要再拍一次序,按照原来的id号排;

5.最后再按照原来id循序依次输出名次

#include<bits/stdc++.h>
using namespace std;
struct stu{
    int a,b,c;
    int t,sum,s2,mx,id;
}st[10005];
bool cmp1(stu x,stu y)//按照题目中条件依次写排序规则
{
    if(x.sum!=y.sum)
        return x.sum>y.sum;

    else if(x.s2!=y.s2)
        return x.s2>y.s2;
    else if(x.mx!=y.mx)
        return x.mx>y.mx;
    else
        return true;//名次一样
}
bool cmp2(stu x,stu y)
{
    return x.id<y.id;//二次排序,使按照原来的顺序依次输出名次
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>st[i].a>>st[i].b>>st[i].c;
        st[i].id=i;
        st[i].sum=st[i].a+st[i].b+st[i].c;
        st[i].s2=st[i].a+st[i].b;
        st[i].mx=max(st[i].a,st[i].b);
    }
    sort(st,st+n,cmp1);
    st[0].t=1; //第一个名次肯定为1
    for(int i=1;i<n;i++)
    {
    //这里必须要考虑三个条件,只有三个条件都一样时名次才一样
        if((st[i].mx==st[i-1].mx)&&(st[i].sum==st[i-1].sum)&&(st[i].s2==st[i-1].s2))
        {
            st[i].t=st[i-1].t;
        }
        else
            st[i].t=i+1;//地址从0开始,故名次要加1
    }
    sort(st,st+n,cmp2);
    for(int i=0;i<n;i++)
    {
        cout<<st[i].t<<endl;
    }


    return 0;
}

相关文章:

  • CSDN博客写作教学(四):标题优化与SEO实战
  • I2C驱动(十一) -- gpio模拟的i2c总线驱动i2c-gpio.c分析
  • EdgeNext模型详解及代码复现
  • 开启AI短剧新纪元!SkyReels-V1/A1双剑合璧!昆仑万维开源首个面向AI短剧的视频生成模型
  • 李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器
  • javaEE初阶————多线程初阶(5)
  • Unity 接入本地部署的DeepSeek
  • C语言复习4:有关数组的基础常见算法
  • C语言复习8:动态内存分配
  • 流程定义和流程实例
  • rk3568 sysrq如何使用快捷键
  • 题解 | 牛客周赛83 Java ABCDEF
  • 多Agent协作智能系统
  • Flutter系列教程之(9)——Flutter调用Android原生
  • 让自己如何快速有用一台华为云桌面。
  • 2025国家护网HVV高频面试题总结来了01(题目+回答)
  • C# dll文件的反编译获取源码
  • 【蓝桥】大小写转换
  • [含文档+PPT+源码等]精品基于Python实现的微信小程序的在线医疗咨询系统
  • 我们应该如何优化UI(基于UGUI)
  • 帮推广平台/广州seo成功案例
  • 联想电脑网站建设策划书/下载百度app下载
  • 吕梁网站设计/seo网上培训课程
  • google做网站框架/中国网民博客 seo
  • 旅游网站开发功能/网站制作公司网站
  • 网站效果用什么软件做/满十八岁可以申请abc认证吗