#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <string.h>#include <stdio.h>#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct Student{ char name[256]; int score; int sore_type;} Student;bool my_compare(const Student* stu1, const Student* stu2){ if (stu1->sore_type == 0) { return stu1->score > stu2->score; } else { return stu1->score < stu2->score; }}//https://www.nowcoder.com/PRactice/0383714a1bb749499050d2e0610418b1?tpId=40&tqId=21333&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking//c/c++之成績排序:std:stable_sort對結構體struct排序。/**查找和排序題目:輸入任意(用戶,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績都按先錄入排列在前的規則處理。例示:jack 70peter 96Tom 70smith 67從高到低 成績peter 96jack 70Tom 70smith 67從低到高smith 67Tom 70jack 70peter 96輸入描述:輸入多行,先輸入要排序的人的個數,然后輸入排序方法0(降序)或者1(升序)再分別輸入他們的名字和成績,以一個空格隔開輸出描述:按照指定方式輸出名字和成績,名字和成績之間以一個空格隔開輸入例子:30fang 90yang 50ning 70輸出例子:fang 90ning 70yang 50*/int main(){ int count; //循環處理多個測試用例 while (scanf("%d", &count) != EOF) { int type; scanf("%d", &type); std::vector<Student*> list; for (int i = 0; i < count; i++) { char name[256] = { 0 }; int score; scanf("%s", name); scanf("%d", &score); Student* stu = new Student(); stu->score = score; stu->sore_type = type; strcpy(stu->name, name); list.push_back(stu); } //std::sort(list.begin(), list.end(), my_compare);//存在問題 std::stable_sort(list.begin(), list.end(), my_compare); for (int i = 0; i < count; i++) { Student* stu = list.at(i); printf("%s %d/n", stu->name, stu->score); } } return 0;}
新聞熱點
疑難解答