7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

利用结构体数组,重写送sort方法

*/

#include<bits/stdc++.h>

using namespace std;

struct Node{

string id;

int grate;

int examranking;//考试排名

int examsite;//考点

int siteranking;//考点排名

};

//这是定义一个递减的sort

bool sort_Grate(Node a,Node b){

if( a.grate == b.grate )

return a.id < b.id;

return a.grate > b.grate;

}

int main(){

int N;

int sum = 0;

Node *stu = new Node[30005];

cin >> N;

for( int i = 0; i < N; i++ ){

int K;

cin >> K;

for( int j = sum; j < sum + K; j++ ){

cin >> stu[j].id >> stu[j].grate;

stu[j]. examsite = i + 1;//记录考点

}

sort(stu+sum,stu+sum+K,sort_Grate);//这是处理每个考点内的排名

int count = 1;//记录排名

for( int j = sum; j < sum + K; j++ ){

if( j == sum){//处理第一个为排名第一的

stu[j].siteranking = count;

}else{

if( stu[j].grate == stu[j - 1].grate)

stu[j].siteranking = stu[j - 1].siteranking;

else

stu[j].siteranking = count;

}

count++;

}

sum += K;

}

//还剩下总排名未处理

sort(stu,stu+sum,sort_Grate); //每一次sort排序都是将 结构体里的变量都进行了排序(当然我们按照成绩进行排序)

for( int j = 0; j < sum; j++ ){

if( stu[j].grate == stu[j - 1].grate)

stu[j].examranking = stu[j - 1].examranking;

else

stu[j].examranking = j + 1;

}

cout << sum << endl;

for( int i = 0; i < sum; i++ ){

cout << stu[i].id << ’ ’ << stu[i].examranking << ’ ’ << stu[i].examsite << ’ ’ << stu[i].siteranking << endl;

}

}

在这里插入图片描述

四:补充

===================================================================

兄弟们 最恶心东西我今天又遇到了,上面那个码的思路思路是我参考别人的,我自己写了一个码,pta上有两个点过不去,本来今天我早就下班了,可就是因为,有bug,测试了好多数据,都正常,就是tmd过不去,人都裂开了,要么让我没思路,,要么让我不会做,我都能接受,我做出来了,测试了好多数据正确,然后就。。。。害 老样子,记录失败的结果。加油兄各们!我要睡了

/**

利用结构体数组,重写送sort方法

*/

#include<bits/stdc++.h>

using namespace std;

struct Node{

string id;

int grate;

};

//这是定义一个递减的sort

bool sort_Grate(Node a,Node b){

if( a.grate == b.grate )

return a.id < b.id;

return a.grate > b.grate;

}

int main(){

int N,sum = 0;//sum为考生总人数

int count = 1;//记录考点号

map<string,int>m1,m2,m3; //m1对应总的人数(一个考号对应一个人),m2为一个考号对应一个考点号,m3为一个考号对应其在自己考点的排名

map<string,int>::iterator t;

cin >> N;

for( int i = 0; i < N; i++ ){

int K;

cin >> K;

sum += K;//统计考生数目

Node *node = new Node[K];//用于处理每个考点内的排名

for( int j = 0; j < K; j++ ){

string a;

int b;

cin >> a >> b;

m1[a] = b;

m2[a] = count;

node[j].id = a;

node[j].grate = b;

}

sort(node,node+K,sort_Grate);

for( int k = 0; k < K; k++ ){

string temp = node[k].id; //记录考点号

if( node[k-1].grate == node[k].grate ){//处理成绩相同的排名

m3[temp] = k - 1 + 1;

}else{

m3[temp] = k + 1;

}

}

count++;

}

//创建结构体数组

Node *stu = new Node[sum];

int k = 0;

for( t = m1.begin(); t != m1.end(); t++ ){

stu[k].id = t->first; stu[k].grate = t->second;

k++;

}

//排序

sort(stu,stu+sum,sort_Grate);

cout << sum << endl;

for( int i = 0; i < sum; i++){

cout << stu[i].id << ’ ';

if( stu[i].grate == stu[i-1].grate ){

cout << i - 1 + 1 << ’ ';//当分数相同时 需要和前面的人排名相同所以减一,加一是因为i是从0开始排的

}else{

cout << i + 1 << ’ ';

}

for( t = m2.begin(); t != m2.end(); t++ ){

if( stu[i].id == t->first ){

cout << t->second << ’ ';

break;

}

}

for( t = m3.begin(); t != m3.end(); t++ ){

if( stu[i].id == t->first ){

cout << t->second << endl;

break;

}

}

}

更多:Java进阶核心知识集

包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等

image

高效学习视频

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

k;

}

}

}

更多:Java进阶核心知识集

包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等

[外链图片转存中…(img-VQjVoPG3-1715800898759)]

高效学习视频

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值