这道题算是挺简单,我在群里看到的别人琢磨好久过不去,大多是因为没有考虑好四种等级的判断条件

一定要保证四种判断条件正确。

下面这是我的代码,比较笨。后边有别人那学来的聪明些的方法

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct student{
int number,de,cai,sum;
}A[100000],//H(<100为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,
B[100000],//才分不到但德分到线的一类考生属于“德胜才”,
C[100000],//德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者
D[100000];//其他达到最低线L的考生也
int num=0;
bool cmp(student A,student B){
if(A.sum!=B.sum) return A.sum>B.sum;
else if(A.de!=B.de) return A.de>B.de;
else return A.number<B.number;
}
void prr(student *arr,int Si){
for(int i=0;i<Si;i++){
printf("%08d %d %d",arr[i].number,arr[i].de,arr[i].cai);
num--;
if(num!=0)printf("\n");
}
}
int main(){
int N,L,H,AA,BB,CC,DD;
AA=BB=CC=DD=0;
student temp;
scanf("%d%d%d",&N,&L,&H);
for(int i=0;i<N;i++){
scanf("%d %d %d",&temp.number,&temp.de,&temp.cai);
temp.sum=temp.de+temp.cai;
if(temp.de>=L&&temp.cai>=L){
num++;
if(temp.cai>=H&&temp.de>=H){A[AA++]=temp;continue;}
if(temp.de>=H&&temp.cai<H) {B[BB++]=temp;continue;}
if(temp.cai<H&&temp.de<H&&temp.de>=temp.cai){C[CC++]=temp;continue;}
D[DD++]=temp;
}
}
sort(A,A+AA,cmp);
sort(B,B+BB,cmp);
sort(C,C+CC,cmp);
sort(D,D+DD,cmp);
printf("%d\n",num);
prr(A,AA);
prr(B,BB);
prr(C,CC);
prr(D,DD);
return 0;
}

好方法:

用结构体数组储存数据,每个数据有一个等级变量,通过这个变量和sort函数排序,直接将四种等级分开了,省去好多事

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct stu{
char id[10];
int D;int C;
int flag,sum;
}temp,ex[100010];
bool cmp(stu a,stu 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.D!=b.D)return a.D>b.D;
else return strcmp(a.id,b.id)<0;
}
int main(){
int N,L,H,local=0;
scanf("%d %d %d",&N,&L,&H);
for(int i=0;i<N;i++){
scanf("%s %d %d",temp.id,&temp.D,&temp.C);
if(temp.D<L||temp.C<L)continue;
strcpy(ex[local].id,temp.id);
ex[local].D=temp.D;
ex[local].C=temp.C;
if(ex[local].D>=H&&ex[local].C>=H)ex[local].flag=1;
else if(ex[local].D>=H&&ex[i].C<H)ex[local].flag=2;
else if(ex[local].D<H&&ex[local].C<H&&ex[local].D>=ex[local].C)ex[local].flag=3;
else ex[local].flag=4;
ex[local].sum=ex[local].D+ex[local].C;
local++;
}
sort(ex,ex+local,cmp);
printf("%d\n",local);
for(int i=0;i<local;i++){
printf("%s %d %d\n",ex[i].id,ex[i].D,ex[i].C);
}
return 0;
}

【PAT】B1015 德才论的更多相关文章

  1. PAT B1015 德才论 (25 分)

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

  2. PAT B1015德才论

    题目描述: 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不 ...

  3. PAT 1015. 德才论 (25) JAVA

    宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...

  4. PAT 1015. 德才论 (25)

    宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...

  5. PAT 1015 德才论 (25)(代码+思路)

    1015 德才论 (25)(25 分)提问 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子, ...

  6. PAT——1015. 德才论

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

  7. 【算法笔记】B1015 德才论

    1015 德才论 (25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君 ...

  8. PAT 1015 德才论

    https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312 宋代史学家司马光在<资治通鉴>中 ...

  9. PAT B1015A1062德才论(25)

    题目描述 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得 ...

随机推荐

  1. remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.

    如果cmake提示下列错误:......CMake Error at cmake/readline.cmake:85 (MESSAGE):  Curses library not found.  Pl ...

  2. (二)通过fork编写一个简单的并发服务器

    概述 那么最简单的服务端并发处理客户端请求就是,父进程用监听套接字监听,当有连接过来时那么监听套接字就变成了已连接套接字(源和目的的IP和端口都包含了),这时候就可以和客户端通信,但此时其他客户端无法 ...

  3. ThreadPoolExecutor系列二——ThreadPoolExecutor 代码流程图

    ThreadPoolExecutor 代码流程图 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681648.ht ...

  4. Git合并不同url的项目

    本文由云+社区发表 作者:工程师小熊 摘要:为了让项目能实现Git+Gerrit+Jenkin的持续集成,我们把项目从Git上迁移到了Gerrit上,发现有的同事在老Git提交代码,因为Gerrit做 ...

  5. Perl IO:操作系统层次的IO

    sysopen() open()和sysopen()都打开文件句柄,open()是比较高层次的打开文件句柄,sysopen()相对要底层一点.但它们打开的文件句柄并没有区别,只不过sysopen()有 ...

  6. Haskell复习笔记(二)

    Haskell中的递归 递归就是定义函数以调用自身的方式,关于递归解决问题的实例有很多,如斐波那契数列,还有汉诺塔问题,递归也正是Haskell中用来解决循环问题的关键. 自定义maxinum函数 m ...

  7. WPF 界面如何绑定Command

    WPF中,我们使用MVVM,在ViewModel中定义Command和其业务逻辑,界面绑定Command. 那么是不是所有的事件都可以定义Command呢,然后将业务全部放在ViewModel中呢? ...

  8. MVC防止CSRF攻击

    可能我们大多数人做web的时候不会太注意这个问题,但是这是一个很重要的一个点.我们写代码写业务的时候也应该从各方面多思考. 首先就是先简单介绍下什么是CSRF CSRF 全程是 Cross-site ...

  9. Djiango初识

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片 等.因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 st ...

  10. JS之类数组

    类数组 什么是类数组? 定义: 拥有length属性,其属性(索引)为非负整数 不具有数组的所具有的方法 类数组与非类数组的比较 类数组: var obj = { 0 : "a", ...