9.2 德才论

2024-02-02 07:59
文章标签 9.2 德才

本文主要是介绍9.2 德才论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

输入格式:

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

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

输出格式:

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

 经过:

        今天数据结构实验课的题目,乍一看感觉挺简单,思路就是先对所有合格考生的总分从小到大排序,这个过程可以使用快速排序实现;再根据四个分数标准把排好序的数据分成四类,遇到同类且总分相同的则比较德育分,德育分相同再按准考证号升序,这个过程可以采用链表,在链表插入过程中再对同总分的数据进一步排序,可采用插入排序实现,因为此时数据基本有序,插入排序在这种情况下时间复杂度较小,比较适合。

        很快啊,代码就扣出来了,最近考试周要来了,事挺多,所以实验课要速战速决!必须立刻拿下!提交!

        哎咋回事啊?(经过漫长的debug)哦双向链表忘了改后继结点的前驱指针了 

         改好,提交!

        

        哎咋又超时了 ?(经过漫长的debug)哦遍历时把前导和后随指针的起始点都设在链表的尾节点上了,结果尾插的时候插成闭环了😰。

         改好,提交!

        

         赢了!然而一抬头天都黑完了😓,明天大物小测还没复习,感觉要寄😓。

        太晚了,先开睡,明天的明天再说!💤

参考代码:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>//定义存储考生考号和分数的结构体
typedef struct SCORE{char num[9];int d, c;
}INFO;//定义链表
typedef struct CHAINLISTNODE{struct SCORE item;struct CHAINLISTNODE *next;struct CHAINLISTNODE *before;
} CLN,*CLNptr;
typedef struct CHAINLIST{CLNptr head;CLNptr rear;
} CL;
void push(CL *cl,INFO ins){//链表插入操作,插入时对总分相同的依次按德育分降序和学号升序进行排序CLNptr p = (CLNptr)malloc(sizeof(CLN));CLNptr tra = cl->rear,ptra=NULL;while(tra->before&&tra->item.c+tra->item.d==ins.c+ins.d&&tra->item.d<ins.d){ptra = tra;tra = tra->before;}while(tra->before&&tra->item.c+tra->item.d==ins.c+ins.d&&tra->item.d==ins.d&&strcmp(tra->item.num,ins.num)>0){ptra = tra;tra = tra->before;}p->before = tra;p->next = tra->next;p->item = ins;tra->next = p;if(ptra)ptra->before = p;if(tra==cl->rear)cl->rear = p;
}
CL init(){//链表初始化操作CLNptr p = (CLNptr)malloc(sizeof(CLN));p->next = NULL;p->before = NULL;CL cl;cl.head = p;cl.rear = p;return cl;
}
void traverse(CL cl){//链表遍历输出CLNptr p = cl.head->next;while(p!=NULL){printf("%s %d %d\n", p->item.num, p->item.d, p->item.c);p = p->next;}
}//快速排序
void T(INFO *x,INFO *y){INFO tmp;tmp = *x;*x = *y;*y = tmp;
}
int partition(INFO *list,int left,int right){INFO key = list[left];while (left<right){while (left<right&&list[right].c+list[right].d<=key.c+key.d)--right;T(list + left, list + right);while (left<right&&list[left].c + list[left].d>=key.c+key.d)++left;T(list + left, list + right);}T(list + left, &key);return left;
}
void quicksort(INFO *list,int left,int right){if(left<right){int mid = partition(list, left, right);if(left<mid-1)quicksort(list, left, mid - 1);if(right>mid+1)quicksort(list, mid + 1, right);}
}int main(){int n, L, H;scanf("%d%d%d", &n, &L, &H);INFO *list = (INFO *)malloc(sizeof(INFO) * n);int len = 0;for (int i = 0; i < n;++i){int d, c;char num[9];scanf("%s%d%d", num, &d, &c);if(d>=L&&c>=L){strcpy(list[len].num, num);list[len].c = c;list[len].d = d;++len;}}quicksort(list, 0, len - 1);CL level[4];//对四个类别建桶for (int i = 0; i < 4;++i){level[i] = init();}for (int i = 0; i < len;++i){if(list[i].d>=H){if(list[i].c>=H){//德才兼备入桶0push(level + 0, list[i]);}else{//德胜才入桶1push(level + 1, list[i]);}}else{if(list[i].c<H&&list[i].d>=list[i].c){//才德兼亡但尚有德胜才入桶2push(level + 2, list[i]);}else{//其余入桶3push(level + 3, list[i]);}}}printf("%d\n", len);for (int i = 0; i < 4;++i){traverse(level[i]);}return 0;
}

        又

        c语言标准库好像有自带快速排序,刚刚才知道🐊🐊

        用qsort重写一遍:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct SCORE{char num[9];int d, c, sum, level;
}*ptr;
int compare(const void *X,const void *Y){ptr x = (ptr)X, y = (ptr)Y;if(x->level<y->level){return -1;}else if(x->level==y->level){if(x->sum>y->sum){return -1;}else if(x->sum==y->sum){if(x->d>y->d){return -1;}else if(x->d==y->d){if(strcmp(x->num,y->num)<0){return -1;}}}}return 1;
}
int main(){int n, L, H;scanf("%d%d%d", &n, &L, &H);ptr list = (ptr)malloc(sizeof(struct SCORE) * n);int len = 0;for (int i = 0; i < n;++i){int d, c;char num[9];scanf("%s%d%d", num, &d, &c);if(d>=L&&c>=L){strcpy(list[len].num, num);list[len].c = c;list[len].d = d;list[len].sum = c + d;if(c>=H&&d>=H){list[len].level = 0;}else if(d>=H){list[len].level = 1;}else if(d>=c){list[len].level = 2;}else{list[len].level = 3;}++len;}}qsort(list, len, sizeof(struct SCORE), compare);printf("%d\n",len);for (int i = 0; i < len;++i){printf("%s %d %d\n", list[i].num, list[i].d, list[i].c);}return 0;
}

这篇关于9.2 德才论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670017

相关文章

算法导论 第2版 9.2 线性时间做选择

以书上伪代码为模板编写 #include<iostream>using namespace std;int A[11] = {-1,4,1,8,3,10,2,5,6,9,7};//下标从1开始,因此A[0]不用,用-1标记int partition(int *A, int p, int r)//划分函数{int x = A[r];int i = p-1;int temp;for(int j

pat 之德才论问题

题目描述 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。 输入描述: 输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低

9.2JavaEE——JDBCTemplate的常用方法(三)query()方法

JdbcTemplate类中常用的查询方法  方法说明List query(String sql, RowMapper rowMapper)执行String类型参数提供的SQL语句,并通过参数rowMapper返回一个List类型的结果。List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper)根据String

9.2.2 DeepLab系列模型中每一代的创新是什么?是为了解决什么问题?

9.2.2 DeepLab系列模型中每一代的创新是什么?是为了解决什么问题? 前情回顾:9.2.1 简述图像分割中经常用到的编码器-解码器网络结构的设计理念。 DeepLab是Google 团队提出的一系列图像分割算法。 DeepLab v1在2014年被提出,并在PASCAL VOC2012数据集上取得了图像分割任务第二名的成绩。 Google 团队之后还陆续推出了DeepLab

【python】OpenCV—Histogram Matching(9.2)

学习来自OpenCV基础(17)基于OpenCV、scikit-image和Python的直方图匹配 文章目录 直方图匹配介绍scikit-image 中的直方图匹配小试牛刀风格迁移 直方图匹配介绍 直方图匹配(Histogram Matching)是一种图像处理技术,旨在将一张图像的像素值分布调整到与另一张图像的像素值分布相匹配。这种技术在图像增强、颜色校正等任务中非常有

9.2 Go 接口的实现

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO系列: 记录博主学习GO语言的笔

【雅礼联考GDOI2017模拟9.2】Ztxz16学图论

Description 众所周知,Zjr506是算法之神,因此Ztxz16经常向他请教算法。这一天,Zjr506在教导了Ztxz16关于图论方面的一些算法后,给他出了一道图论题作为家庭作业: 给定N个点,M条无向边,Q个询问,每个询问给定L, R,问连上第L~R条边后,图中有多少联通块(询问之间互不影响)。 Ztxz16智商太低,百思不得其解,只好向你请教这个问题。 Input 第一行输

精通DirectX.3D图形与动画程序设计(王德才 杨关胜 孙玉萍/编著,2007年5月出版)读书摘要(2008.8.4至今)

 ——谨以此篇日志,纪念本人进入游戏行业7周年 chap5光照和材质 使用光照效果能够有效地增强场景的真实感。 光照处理和顶点坐标变换一起构成了Direct3D图形显示的第一阶段:顶点坐标变换和光照流水线。 5.1光照计算模型 Direct3D光照计算模型包括4种:环境光、漫反射光、镜面反射光和自发光。它们的结合能灵活高效地解决三维图形程序中的光照问题。当然,程序员也完

9.2 响应者链

MyView.h <UIKit/UIKit.h> @interface MyView : UIView@property(strong,nonatomic)NSString*name;@end #import "MyView.h"@implementation MyView#pragma mark 让响应者链往下传递-(void)touchesBegan:(NSSe

9.2.k8s的控制器资源(rs控制器replicasets)

目录 一、replicaset副本控制器      二、rs控制器资源的管理 1.基于标签-创建rs资源 2.基于标签表达式创建rs资源 三、rs资源的升级和回滚 一、replicaset副本控制器      replicaset副本控制器,简称:rs控制器; 用法:与rc控制器“几乎”相同;能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达