当前位置:网站首页>7-41 PAT排名汇总 (25 分)多样排序
7-41 PAT排名汇总 (25 分)多样排序
2022-08-02 02:56:00 【兄dei!】
原题:https://pintia.cn/problem-sets/15/problems/888
思路:
创建一个结构体,里面包含每个考生的各种信息:姓名,成绩,分区排名,最终排名,地区
struct stu {
string name;
int score,place,Sum_rank,zone_rank;
}List[MAXSIZE];
排序分成三步:
第一步,对分区学生按照成绩高低进行排名,同时将排名记录进该考试信息中;
第二步,对所有考生按照成绩高低进行排名,同时将排名记录进该考试信息中;
第三步,对所有考生按照总地区的排名进行排序,如果出现并列的则按小学号排序;
完成第三步之后直接按顺序输出即可;
#include<iostream>
#include<algorithm>
#include<string>
#define MAXSIZE 30010
using namespace std;
struct stu {
string name;
int score,place,Sum_rank,zone_rank;
}List[MAXSIZE];
bool cmp(stu a, stu b) { return a.score > b.score; }
bool cmp1(stu a, stu b)
{
return a.Sum_rank != b.Sum_rank ? a.Sum_rank < b.Sum_rank : a.name < b.name;
}
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int k;
struct stu stus[300];
scanf("%d", &k);
for (int j = 0; j < k; j++)
{
cin >> stus[j].name>>stus[j].score;
stus[j].place = i;
}
sort(stus, stus + k, cmp);
//开始处理分区排名,并且处理并列的那些排名
for (int j = 0; j < k; j++)
{
int p = j;
if (stus[j - 1].score == stus[j].score && j >= 1) {
while (stus[p - 1].score == stus[p].score && p >= 1)p--;
}
stus[j].zone_rank = p + 1;
List[cnt++] = stus[j];//存储到总表之中
}
}
sort(List, List + cnt,cmp);//对总表进行排名,并且处理并列的排名
for (int j = 0; j < cnt; j++)
{
int p = j;
if (List[j - 1].score == List[j].score && j >= 1) {
while (List[p - 1].score == List[p].score && p >= 1)p--;
}
List[j].Sum_rank = p+1;
}
sort(List, List + cnt, cmp1);
cout << cnt << endl;
for (int i = 0; i < cnt; i++)
{
cout << List[i].name << " " << List[i].Sum_rank << " " << List[i].place << " " << List[i].zone_rank << endl;
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
忽晴忽雨
合奥科技网络 面试(含参考答案)
Istio微服务治理网格的全方面可视化监控(微服务架构展示、资源监控、流量监控、链路监控)
Heuristic merge, DSU on Tree
利用WebShell拿Shell技巧
feign调用不通问题,JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
【LeetCode】20.有效的括号
OC和Swift语言的区别
Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
MySQL8.0.28 installation tutorial
内卷的正确打开方式
IPFS部署及文件上传(golang)
mockjs生成假数据的基本使用
递归检查配置项是否更变并替换
2W字!梳理50道经典计算机网络面试题(收藏版)
cadence landscape bindkey
启发式合并、DSU on Tree
PHP WebShell 免杀
"Paid paddling" stealthily brushes Brother Ali's face scriptures, challenges bytes three times, and finally achieves positive results
VPS8701 电源管理(PMIC) VPS8701