提交记录 #385
提交时间:2024-12-03 16:07:51
语言:c
状态:Unaccepted
编译情况:编译成功
固定测试点#1:
固定测试点#2:
固定测试点#3:
附加测试点暂不可用
5757.【中学】学生成绩排序
#include <stdio.h>
int main() {
int n;
int max_name_length = 100; // 假设最大姓名长度为100
char namestr[100 * max_name_length]; // 100个学生,每个学生的姓名最大长度100
int grade[100];
int name_index[100]; // 存储每个学生姓名在namestr中的起始位置
// 输入学生人数
scanf("%d", &n);
// 输入每个学生的姓名和成绩
for (int i = 0; i < n; i++) {
// 读取学生姓名,确保不会超出最大长度
scanf("%99s", &namestr[i * max_name_length]); // 每个学生的姓名占一个最大长度的空间
name_index[i] = i * max_name_length; // 记录每个学生姓名的起始位置
scanf("%d", &grade[i]);
}
// 冒泡排序:根据成绩从高到低排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (grade[j] < grade[j + 1]) {
// 交换成绩
int tempGrade = grade[j];
grade[j] = grade[j + 1];
grade[j + 1] = tempGrade;
// 交换姓名(逐字符交换)
for (int k = 0; k < max_name_length && namestr[name_index[j] + k] != '\0' && namestr[name_index[j + 1] + k] != '\0'; k++) {
char tempChar = namestr[name_index[j] + k];
namestr[name_index[j] + k] = namestr[name_index[j + 1] + k];
namestr[name_index[j + 1] + k] = tempChar;
}
}
}
}
// 输出排序后的结果
for (int i = 0; i < n; i++) {
printf("%s,%d\n", &namestr[name_index[i]], grade[i]);
}
return 0;
}