日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-41 PAT排名汇总 (25 分)多样排序

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-41 PAT排名汇总 (25 分)多样排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原題: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; }

總結

以上是生活随笔為你收集整理的7-41 PAT排名汇总 (25 分)多样排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。