#include <stdio.h> int main() { int n, flag; // 循环读取输入,直到文件结束(EOF) while (scanf("%d", &n) != EOF) { // 读取排序标志 scanf("%d", &flag); // 定义用户数组、成绩数组和标记数组 char user[n][100]; int grade[n]; int chose[n]; // 初始化标记数组,将所有元素置为 0 for (int k = 0; k < n; k++) { chose[k] = 0; } // 读取每个用户的姓名和成绩 for (int i = 0; i < n; i++) { scanf("%s %d", user[i], &grade[i]); } if (flag == 1) { // 升序排序 for (int i = 0; i < n; i++) { int minIndex = -1; int min = 10000; // 遍历成绩数组,找出未标记的最小成绩及其索引 for (int j = 0; j < n; j++) { if (grade[j] < min && chose[j] != 1) { min = grade[j]; minIndex = j; } } // 输出最小成绩对应的用户信息 printf("%s %d\n", user[minIndex], min); // 标记该元素已被处理 chose[minIndex] = 1; } } else if (flag == 0) { // 降序排序 for (int i = 0; i < n; i++) { int maxIndex = -1; int max = -1; // 遍历成绩数组,找出未标记的最大成绩及其索引 for (int j = 0; j < n; j++) { if (grade[j] > max && chose[j] != 1) { max = grade[j]; maxIndex = j; } } // 输出最大成绩对应的用户信息 printf("%s %d\n", user[maxIndex], max); // 标记该元素已被处理 chose[maxIndex] = 1; } } } return 0; }