• 排名的实现


    很多排序题目会要求在排序之后计算出每个个体的排名,而且一般规则都是:
    分数不同的排名不同,分数相同的排名相同但占用一个排位!
    举个简单的例子:有五位同学的分数分别为91、90、90、90、90、89,那么对应的排名应该是1、2、2、2、2、5。
    此种情况,一般都要在结构体中进行类型定义的时候需要将排名信息加入到结构体中。因此在数组排完序后就有以下两种方法来实现排名的计算:

    1.先将数组第一个个体(设数组下标从0开始)的排名记为1,然后遍历剩余的个体。如果当前的个体的分数等于上一个个体的分数,那么当前个体的排名就等于上一个个体的排名;否则,当前的个体的排名就等于其数据下标加一。相应的代码:

    student[0].rank = 1;
    for(int i=1;i<n;i++){
        if(student[i].score != student[i-1].score)
            student[i].rank = student[i-1].rank;
        else
            student[i].rank = i + 1;
    }
    

    2.有些题目并不需要记录下排名信息,而是直接输出就可以,那么有这样的方法:
    设置一个int型变量,如rank = 1,然后遍历所有的个体:如果当前个体不是第一个个体且当前个体的分数不等于上一个个体的分数,那么令rank等于数据下标加一,此时的rank就是当前个体的排名,直接输出。
    这种做法适合信息量较大,而且只需要输出排名信息,不记录排名信息!相应的代码:

    int rank = 1;
    for(int i=0;i<n;i++){
        if(rank > 0 && student[i].score != student[i-1].score)
            rank = i + 1;
        //输出当前个体信息,或者令student[i].rank = rank;
    }
  • 相关阅读:
    Entity Framework 简介
    MongoDB 简述及安装
    js、sql和python版本的乘法口诀对比
    sql 判断输入的日期是否有重叠
    win10 不能调节屏幕亮度 win10 屏幕亮度调节快捷键不能用
    mysql主从配置常见错误处理
    Linux安装mysql总结
    linux安装mongodb总结
    centos安装redis总结
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  • 原文地址:https://www.cnblogs.com/techgy/p/15022205.html
Copyright © 2020-2023  润新知