#include #include #include #pragma GCC optimize("Ofast,inline") #define MAX 21 typedef struct STUDENT { char name[MAX]; int score; } STUDENT; void GetInput(STUDENT **dude); void sort(STUDENT *students, int n); void PrintStudent(STUDENT dude); void swap(STUDENT *left, STUDENT *right); int main(void) { int n; scanf("%d", &n); STUDENT students[n]; for (int i = 0; i < n; i++) { scanf("%s", students[i].name); scanf("%d", &(students[i].score)); } sort(students, n); for (int i = 0; i < n; i++) { printf("Name:%s\n", students[i].name); printf("total:%d\n", students[i].score); printf("\n"); } return 0; } void sort(STUDENT *students, int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n - 1; j++) { if (students[j].score < students[j + 1].score) { swap(&students[j], &students[j + 1]); } else if (students[j].score == students[j + 1].score) { if (strcmp(students[j].name, students[j + 1].name) > 0) { swap(&students[j], &students[j + 1]); } } } } } void PrintStudent(STUDENT dude) { printf("Name:%s\n", dude.name); printf("total:%d\n", dude.score); } void swap(STUDENT *left, STUDENT *right) { STUDENT tmp; // Swap name strcpy(tmp.name, left->name); strcpy(left->name, right->name); strcpy(right->name, tmp.name); // Swap score int temp = left->score; left->score = right->score; right->score = temp; }