H2430819100


私信TA

用户名:dotcpp0794292

访问量:547

签 名:

东风吹破少年事,从此再无赤子心

等  级
排  名 1020
经  验 3316
参赛次数 1
文章发表 53
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

解题思路:

注意事项:

参考代码:

#include <iostream>

#include<algorithm>

using namespace std;


// 定义学生结构体,包含姓名(字符数组形式,最多容纳20个字符)和成绩(整数类型)两个成员

typedef struct student 

{

    char name[20]; 

    int cj;        

} stu;


// 比较函数,用于定义排序规则

// 该函数接受两个学生结构体类型的参数x1和x2

bool compare(stu x1, stu x2)

{

    // 首先判断成绩是否相等

    if (x1.cj == x2.cj)

    {

        // 如果成绩相等,按姓名字典序比较

        // 逐个字符比较姓名的ASCII码大小来确定先后顺序

        for (int i = 0; i < 20; i++)

        {

            // 如果x1的当前字符大于x2的当前字符,说明x2的姓名字典序在前,返回false

            if (x1.name[i] > x2.name[i])

                return false;

            // 如果x1的当前字符小于x2的当前字符,说明x1的姓名字典序在前,返回true

            else if (x1.name[i] < x2.name[i])

                return true;

        }

    }

    // 如果成绩不相等,按成绩从高到低排序,成绩高的排在前面,所以返回x1的成绩大于x2的成绩的比较结果

    return x1.cj > x2.cj;

}


int main() 

{

    // n用于存储学生的数量

    int n, i;

    // 从标准输入读取学生的数量

    cin >> n;

    // 定义一个可以容纳21个学生结构体的数组,用于存储学生信息(实际最多使用n个元素)

    stu s[21];

    // 循环读取每个学生的姓名和成绩

    for (i = 0; i < n; i++)

    {

        cin >> s[i].name >> s[i].cj;

    }

    // 使用自定义的比较函数compare对学生数组s进行排序,范围是从s[0]到s[n - 1]

    sort(s, s + n, compare);

    // 循环输出排序后的每个学生的姓名和成绩

    for (i = 0; i < n; i++)

    {

        cout << s[i].name << " " << s[i].cj << endl;

    }

    return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »