zoukankan      html  css  js  c++  java
  • ACM基础之结构体排序

    问题 E: 【排序】排名

    时间限制: 1 Sec  内存限制: 64 MB


    题目描述

    班上刚测试了几门课,现在信息技术课的老师要分析一些功课之间的成绩关系,看看每个人的信息技术课成绩排名以及数学课成绩排名,并按信息技术课的成绩从高到低排列,如果两个人的信息技术课成绩相同,则学号小的排在前面。老师把任务交给了信息学最好的你,请你编程完成这个任务。

    输入

    第1行一个整数N,表示共有N个同学的成绩(1≤N≤45);后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩(成绩C:0≤C≤120)。

    输出

    共N行,每行6个数据,分别对应一个同学的语文、数学、英语、信息技术成绩和信息技术及数学成绩的排名。

    样例输入

    3
    90 95 89 110
    95 120 78 115
    96 97 103 92
    

    样例输出

    95 120 78 115 1 1
    90 95 89 110 2 3
    96 97 103 92 3 2


    先上代码(C++):

    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    struct stu
    {
    int ch,ma,en,co;//语文 数学 外语 信息成绩。
    int mr;//数学排名。
    int id;//学号。
    };
    int cmp(stu a,stu b)
    {
    if(a.ma==b.ma)
    {
    return a.id<b.id;
    }
    else
    {
    return a.ma>b.ma;
    }
    }
    int cmp1(stu a,stu b)
    {
    if(a.co==b.co)
    {
    return a.id<b.id;
    }
    else
    {
    return a.co>b.co;
    }
    }
    int main()
    {
    int n;
    cin>>n;
    stu s[n+5];
    for(int i=0;i<n;i++)
    {
    cin>>s[i].ch>>s[i].ma>>s[i].en>>s[i].co;
    s[i].id=i+1;
    }
    sort(s,s+n,cmp);
    for(int i=0;i<n;i++)
    {
    s[i].mr=i+1;
    }
    sort(s,s+n,cmp1);
    for(int i=0;i<n;i++)
    {
    printf("%d %d %d %d %d %d ",s[i].ch,s[i].ma,s[i].en,s[i].co,i+1,s[i].mr);
    }
    return 0;
    }

    思路:

    此问题明显考察的结构体排序,首先重写排序算法sort,cmp,对结构体里的“数学”元素ma进行排序,然后对结构体中的数学排名mr进行赋值。然后再次重写排序cmp1.为了省事,不对信息co进行赋予排名,直接输出i+1,

    注意:

    重写结构体时候不能漏掉“若成绩相同时候按照学号排序”此点,故重写时候进行简单的if判定。

    PS:菜鸟一个,大一放弃过ACM,现在在俱乐部与新生一起划水。



  • 相关阅读:
    SqlServer 查看数据库中所有存储过程
    SqlServer 查看数据库中所有视图
    SqlServer 查询表的详细信息
    SqlServer 遍历修改字段长度
    net core 操作Redis
    Tuning SharePoint Workflow Engine
    Open With Explorer
    Download language packs for SharePoint 2013
    Change Maximum Size For SharePoint List Template when Saving
    Six ways to store settings in SharePoint
  • 原文地址:https://www.cnblogs.com/shdwin/p/10200633.html
Copyright © 2011-2022 走看看