首页 > 其他分享 >7-41 PAT排名汇总 (25 分)(详解 思路 重写sort函数)兄弟们冲呀呀呀呀呀呀呀

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

时间:2024-09-23 13:22:52浏览次数:11  
标签:sort 25 呀呀 int sum ++ stu grate

二:思路

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

利用结构体存储 学号 成绩 总排名 考点号 本考点的排名 ;然后在输入的时候 要记得 将 j 设置成一个变量,这样就能挨个把所有的值都输入到结构体数组当中。再然后就是,向结构体里的变量进行赋值。

三:上码

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

/**

利用结构体数组,重写送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]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎徽关注公zhong号:编程进阶路 加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.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;

标签:sort,25,呀呀,int,sum,++,stu,grate
From: https://blog.51cto.com/u_17015008/12088728

相关文章

  • 25豪迈面试/机械研发工程师攻略
    25豪迈机械面试面试题目+答案豪迈面试/机械研发工程师:一面问题:1、高考成绩&四六级成绩回答示例:“我的高考成绩虽然不能直接反映我的专业能力,但它是我努力学习的证明。至于四六级成绩,我顺利通过了大学英语六级考试,这有助于我在阅读英文技术文档和国际交流时更加自如。”......
  • 25石头科技机械结构工程师机械面试问题攻略
    25石头科技机械结构工程师面试心得石头科技面试题目+答案免费资源:【免费】25石头科技机械结构工程师机械面试心得资源-CSDN文库https://download.csdn.net/download/m0_72216164/89768935?spm=1001.2014.3001.5503下面分享石头科技机械结构工程师面试全过程。①一面(40min)......
  • BZOJ 2555 = P5212 SubString 题解
    Statement给你一个字符串 \(\text{init}\),要求你支持两个操作:在当前字符串的后面插入一个字符串;询问字符串 \(s\) 在当前字符串中出现了几次?(作为连续子串)你必须在线支持这些操作。Solutionextend中link[cur]=q,相当于link,链加新建copy那里,相当于link,cut,链加询......
  • CRE6255KQ 原边18瓦内置BJT方案
    CRE6255KQ是一款内置高压BJT功率开关管的高性能多模式原边控制的开关电源芯片。该产品方便用户以较少的外围元器件、较低的系统成本设计出高性能的交直流转换开关电源。CRE6255KQ提供了极为全面和性能优异的智能化保护功能,包括逐周期过流保护、软启动、芯片过温保护、输出......
  • 20240909_181725 c语言 标识符
    什么是标识符命名规定标识符特性区分大小写命名约定演练小结......
  • 【计算机专业毕设最新Java必过毕设选题2025】基于springboot的高校跳蚤市场管理系统(源
    作品简介 Hi,各位同学好呀!今天向大家分享一个最新完成的高质量毕业设计项目作品基于springboot的XXX管理系统项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术前端:html/js/css后端:springboot数据库:MySql服务器:apache-tomcat......
  • 基于springboot图书管理系统设计与实现-毕业设计源码25325
    基于springboot图书管理系统设计与实现摘 要本研究旨在探讨图书管理系统的设计与实现,通过开发一个基于SpringBoot的图书管理系统,实现了用户和管理员的交互操作和系统管理功能。系统分为用户和管理员两部分,用户可以浏览图书信息、进行借阅和归还操作,管理员负责系统的管理和......
  • Python 从入门到实战25(模块)
            我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。上篇文章我们讨论了类继承的相关知识。今天我们将学习一下模块的相关基础知识。1、模块概述        p......
  • 2025基于springboot的网上村委会业务办理系统-JAVA.VUE【源码、论文、开题、实训报告
       博主介绍:......
  • 2025基于springboot的自习室管理和预约系统-JAVA.VUE【源码、论文、开题、实训报告】
       博主介绍:......