PAT 1015 德才论 (25分) C语言实现

2023-11-10

1015 德才论 (25分)

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”

现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

输入格式:

输入第一行给出 3 个正整数,分别为:N(≤10
​5
​​ ),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。

随后 N 行,每行给出一位考生的信息,包括:准考证号 德分 才分,其中准考证号为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。

输出格式:

输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

输入样例:

14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60

输出样例:

12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90

代码:

1.代码地址 https://github.com/MrHaddis/PAT1015
2.代码还有点问题,提示段错误 猜测是因为栈的问题,数组太大了,不能容纳这么多数据导致的,目前还没有想到好的解决方案,先放放吧,回头再填这个坑。

#include <stdio.h>
//MrHaddis
//https://github.com/MrHaddis/PAT1015

struct Student {
    char num[9];
    int deAchievement;
    int caiAchievement;
    int totalAchievement;
};

void sortArray(int index, struct Student studentArray[]);

void printResult(int index, struct Student studentArray[]);

int main() {
    //总的学生
    int totalNumber;
    //低分 高分
    int low, high;
    scanf("%d%d%d", &totalNumber, &low, &high);
    if (totalNumber > 100000 || low < 60 || low > high || high > 100) {
        return 0;
    }
    struct Student studentArray[totalNumber];
    struct Student studentArrayFirst[totalNumber];
    struct Student studentArraySecond[totalNumber];
    struct Student studentArrayThird[totalNumber];
    struct Student studentArrayFourth[totalNumber];
    int indexFirst = 0;
    int indexSecond = 0;
    int indexThird = 0;
    int indexFourth = 0;
    for (int i = 0; i < totalNumber; i++) {
        scanf("%s %d %d", &studentArray[i].num, &studentArray[i].deAchievement,
              &studentArray[i].caiAchievement);
        studentArray[i].totalAchievement =
                studentArray[i].deAchievement + studentArray[i].caiAchievement;
        if (studentArray[i].deAchievement >= high && studentArray[i].caiAchievement >= high) {
            studentArrayFirst[indexFirst++] = studentArray[i];
        } else if (studentArray[i].deAchievement >= high && studentArray[i].caiAchievement >= low) {
            studentArraySecond[indexSecond++] = studentArray[i];
        } else if (studentArray[i].deAchievement < high && studentArray[i].caiAchievement < high
                   && studentArray[i].deAchievement >= low && studentArray[i].caiAchievement >= low
                   && studentArray[i].deAchievement >= studentArray[i].caiAchievement) {
            studentArrayThird[indexThird++] = studentArray[i];
        } else if (studentArray[i].deAchievement >= low && studentArray[i].caiAchievement >= low) {
            studentArrayFourth[indexFourth++] = studentArray[i];
        }
    }
    printf("%d\n", indexFirst + indexSecond + indexThird + indexFourth);
    //一个简单的冒泡排序
    if (indexFirst > 0) {
        sortArray(indexFirst, studentArrayFirst);
    }
    if (indexSecond > 0) {
        sortArray(indexSecond, studentArraySecond);
    }
    if (indexThird > 0) {
        sortArray(indexThird, studentArrayThird);
    }
    if (indexFourth > 0) {
        sortArray(indexFourth, studentArrayFourth);
    }
    return 0;
}

void sortArray(int index, struct Student studentArray[]) {
    int len = index - 1;
    for (int i = 0; i < index; i++) {
        //设置一个标志位
        int flag = 1;
        int tempPostion = 0;  // 记录最后一次交换的位置
        //先给数组排序从大到小
        //然后如果不是1的 则为关键字
        //这时候需要输出
        for (int j = 0; j < len; j++) {
            if (studentArray[j].totalAchievement < studentArray[j + 1].totalAchievement) {
                struct Student temp = studentArray[j];
                studentArray[j] = studentArray[j + 1];
                studentArray[j + 1] = temp;
                //发生交换,标志位置0
                flag = 0;
                tempPostion = j;  //记录交换的位置
            } else if (studentArray[j].totalAchievement ==
                       studentArray[j + 1].totalAchievement) {
                //    当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
                if (studentArray[j].deAchievement < studentArray[j + 1].deAchievement) {
                    struct Student temp = studentArray[j];
                    studentArray[j] = studentArray[j + 1];
                    studentArray[j + 1] = temp;
                    //发生交换,标志位置0
                    flag = 0;
                    tempPostion = j;  //记录交换的位置
                } else if (studentArray[j].deAchievement ==
                           studentArray[j + 1].deAchievement) {
                    //这里对学号做比较
                    for (int k = 0; k < 8; ++k) {
                        if (studentArray[j].num[k] < studentArray[j + 1].num[k]) {
                            struct Student temp = studentArray[j];
                            studentArray[j] = studentArray[j + 1];
                            studentArray[j + 1] = temp;
                            //发生交换,标志位置0
                            flag = 0;
                            tempPostion = j;  //记录交换的位置
                        }
                    }
                }
            }
        }
        len = tempPostion;
        if (flag) {
            //如果没有交换过元素,则已经有序
            break;
        }
    }
    printResult(index, studentArray);
}

void printResult(int index, struct Student studentArray[]) {
    for (int j = 0; j < index; j++) {
        printf("%s %d %d\n", studentArray[j].num, studentArray[j].deAchievement,
               studentArray[j].caiAchievement);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT 1015 德才论 (25分) C语言实现 的相关文章

  • CSDN湘苗培优,遇见更好的自己

    现在 只要你是IT技术爱好者 想要高起点步入职场 快人一步不是梦 湘苗培优 你不容错过 点击蓝色的 湘苗培优 小编带你深入了解如何实现它

随机推荐

  • 深度特征融合---理解add和concat之多层特征融合

    一 如何理解concat和add的方式融合特征 在各个网络模型中 ResNet FPN等采用的element wise add来融合特征 而DenseNet等则采用concat来融合特征 那add与concat形式有什么不同呢 事实上两者都
  • iOS15适配 UINavigationBar和UITabBar设置无效,变成黑色以及uiscrollview为根试图无法到顶

    今天更新了xcode13 运行项目发现iOS15以上的手机导航栏和状态栏之前设置的颜色等属性都不起作用了 都变成了黑色 滚动的时候才能变成正常的颜色 经确认得用UINavigationBarAppearance和UITabBarAppear
  • tms sparkle实现apk下载安装。

    缘起 存放在pc端的apk 如何下载到手机端并安装 一种是通过IM通讯工具 或是复制到u盘上 或是ftp下载 还有就是通过云盘安装 但是以上方法都不是非常方便 思路 下面介绍一种思路 将apk文件存放在pc端的某一路径下 然后生成html文
  • 个人笔记篇-SpringBoot集成Socket

    前言 在我的另一篇文章中 有简单介绍过Socket的相关概念链接 SpringBoot简单集成WebSocket 初步了解后 本次再进行一个深入通俗的理解 Socket作为一种通信机制 通常也被称为 套接字 它类似于人们之间的 打电话行为
  • golang学习笔记

    目录 golang学习笔记 golang知识点 go打开本地文档方法 fmt 打印占位符特殊作用 slice本质 strings包 Stringer Interface golang学习笔记 go官方学习内容是最好最权威的入门go语言的资料
  • 2021最新Java笔试题及答案,Java面试真题精选

    二 回顾整理阿里面试题 基本就这样了 还有一些零星的问题想不起来了 答案也整理出来了 自我介绍 JVM如何加载一个类的过程 双亲委派模型中有哪些方法 HashMap如何实现的 HashMap和ConcurrentHashMap区别 Conc
  • 【安全开发】python—基于正则表达式的爬虫

    0x00 前置 1 搜索引擎 百度 谷歌 企业内部知识库 2 互联网 公网 无需授权 深网 需要授权 暗网 非正式渠道 无法使用常规手段访问 友情提醒 没事别看 3 规则 爬取互联网公开的信息 但正常情况也需要遵守robots协议 网络爬虫
  • 【华为OD机试 2023 B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Qt Graphics View Framework 图形视图框架

    QT的2D绘图我们使用QPainter实现少量绘图是很理想的 但是如果是要绘制大量的2D图形并且需要能够控制管理时就会显得力不从心 好在QT视图体系提供了QGraphics View Framework的框架 使用这个框架可以将各图形项进行
  • MySQL 8.0用户管理

    1 禁止root用户远程访问 1 在安装MySQL数据库软件时 我们已经设置了禁止root远程登录 参见 https blog csdn net chengyuqiang article details 121282247 2 root用户
  • Kubernetes (k8s 1.23) 安装与卸载

    镜像下载 域名解析 时间同步请点击 阿里云开源镜像站 请注意k8s在1 24版本不支持docker容器 本文使用kubeadm进行搭建 1 查看系统版本信息以及修改配置信息 1 1 安装k8s时 临时关闭swap 如果不关闭在执行kubea
  • MySQL的sum函数优化

    有一张表 结构如下 Field Type Null Key Default Extra ID bigint 20 NO PRI NULL auto increment
  • 51单片机开发问题之不能直接对端口管脚输出高低点电平

    在做51单片机点亮一个了led的时候遇到一个问题 不能直接用P0 0 0 对单片机管脚输出高低电平 Keil编译器会报错 如图 用sbit定义一个变量来控制管脚就行
  • 网络安全学习路线是怎样的?从入门到入坟,看这篇就够了

    为什么要学习安全 近几年网络安全事件层出不穷 相信大家哪怕没遇到过 但也听过不少了吧 如服务器遭受入侵被黑 用户帐号被盗 被钓鱼 勒索病毒等 这些一旦发生 对企业而言都是不小的打击 因此 网络安全不容忽视 同时随着时代的不断发展 公司对于运
  • DOM0和DOM2

    DOM事件绑定 DOM0级事件 特点 所有的浏览器都支持 事件只能注册一次 后面的会覆盖旧的 注册方式 1 在html上添加 div div 其中this指向自身 2 匿名函数d nclick function 其中 this 指向自身 3
  • 美国科技大佬成功之前混得都有多惨

    摘要 超过三分之一在美国成立的顶尖高科技公司是由在国外出生的人创立的 他们的成功经验带动许多移民来到美国实现美国梦的希望 id cproIframe u1503021 2 width 250 height 250 src http pos
  • 使用DBN实现风速预测matlab代码

    使用DBN实现风速预测matlab代码 风速预测在实际生产生活中有着广泛的应用 对于风电场 农业灌溉 城市规划等领域都有着重要的意义 本文将介绍如何使用深度信念网络 Deep Belief Networks DBN 来实现风速预测 并提供相
  • Mysql数据库的导入和导出

    Mysql数据库的导入和导出 1 导入 2 导出 Mysql数据库的可移植性是比较好的 在命令行状态下可用仅仅一行的代码就实现数据库的导入和导出 不论是在Windows操作系统还是Linux操作系统下的命令行 命令基本上完全一致 1 导入
  • QT主窗口与子窗口互相传值笔记

    1 主窗口向子窗口传值 将子窗口定义为主窗口的成员变量 在子窗口中定义接受数据的成员变量 主窗口中可以使用子窗口成员变量来访问他的成员变量 于是就能直接赋值了 void Main wgt test son wgt num 18 2 子窗口向
  • PAT 1015 德才论 (25分) C语言实现

    1015 德才论 25分 宋代史学家司马光在 资治通鉴 中有一段著名的 德才论 是故才德全尽谓之圣人 才德兼亡谓之愚人 德胜才谓之君子 才胜德谓之小人 凡取人之术 苟不得圣人 君子而与之 与其得小人 不若得愚人 现给出一批考生的德才分数 请