美文网首页
B1015 1015 德才论 (25分)

B1015 1015 德才论 (25分)

作者: km15 | 来源:发表于2020-01-21 16:55 被阅读0次

考察:排序,cmp + strcmp + sort

learn && wrong:
1、cmp的编写

bool cmp(student a, student b) {
    if (a.flag != b.flag) return a.flag < b.flag; //类别小的在前
    else if (a.sum != b.sum) return a.sum > b.sum; //类别相同,总分大的在前
    else if (a.de != b.de) return a.de > b.de; //总分相同,德分大的在前
    else return strcmp(a.id, b.id) < 0; //德分相同,准考证号小的在前
}

2、str的比较,在string.h中,strcmp(str1,str1)
3、
(1).scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用gets函数。
(2).gets可以接收空格,回车结束,gets(s)是输入一行;而scanf(%s)遇到空格、回车和Tab键都会认为输入结束,所以它不能接收空格。
4、4类人数最多,所以放到最后,这个技巧不错!

/*
编程思想:
输入准考证 德分 才分
1、输入准考证号以及成绩等,
2、依旧条件,修改标记位,用if_else if_else if,不及格的排序,1类,2类
3、然后根据标记位分类

排名:
第一类:才德尽全:全部高于H,总分排序
第二类:才分不够H,但德分高位H,按总分排序,但是排序第一类考生后
第三类:德才分均低于H,但德分不低于才分的,按总分排序,但是排与第二类后
第四类:其他达到最低线的也按总分排序,但排在最后

当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
*/

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

struct student {
    char id[12]; //准考证号
    int de, cai, sum; //德分,才分及总分
    int flag; //考生类别:第一类以及第五类
}stu[100010];

bool cmp(student a, student b) {
    if (a.flag != b.flag) return a.flag < b.flag; //类别小的在前
    else if (a.sum != b.sum) return a.sum > b.sum; //类别相同,总分大的在前
    else if (a.de != b.de) return a.de > b.de; //总分相同,德分大的在前
    else return strcmp(a.id, b.id) < 0; //德分相同,准考证号小的在前
}

int main()
{
    int n, L, H;
    scanf_s("%d%d%d", &n, &L, &H);  
    int m = n;  //m为及格的人数

    for (int i = 0;i < n;i++) {
        cin >> stu[i].id >> stu[i].de >> stu[i].cai;
        stu[i].sum = stu[i].de + stu[i].cai; //计算总分
        if (stu[i].de < L || stu[i].cai < L) {  //现将不及格者设为第5类
            stu[i].flag = 5;
            m--;  //及格人数减一
        }

        else if (stu[i].de >= H && stu[i].cai >= H) stu[i].flag = 1;
        else if (stu[i].de >= H && stu[i].cai < H) stu[i].flag = 2;
        else if (stu[i].de >= stu[i].cai) stu[i].flag = 3;
        else stu[i].flag = 4;  //第四类情况最多,因此放到最后
    }

    sort(stu, stu + n, cmp); //排序
    printf("%d\n", m);
    for (int i = 0;i < m;i++) {
        printf("%s %d %d\n", stu[i].id, stu[i].de, stu[i].cai);
    }

    return 0;
}

相关文章

  • B1015 1015 德才论 (25分)

    考察:排序,cmp + strcmp + sort learn && wrong:1、cmp的编写 2、str的比...

  • 1015 德才论

    宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,...

  • 1015

    //1015 德才论(25 分)//宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人...

  • 1015.德才论

    题目描述 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才...

  • PAT-B 1015 德才论(C语言)

    题目 链接:PAT (Basic Level) Practice 1015 德才论 宋代史学家司马光在《资治通鉴》...

  • 1015. 德才论 (25)

    题目 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之...

  • 1015 德才论(25 分)

  • 1015. 德才论 (25)

    宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,...

  • 1015. 德才论 (25)

    描述 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之...

  • 1015 德才论 (25 分)

网友评论

      本文标题:B1015 1015 德才论 (25分)

      本文链接:https://www.haomeiwen.com/subject/ylmezctx.html