文章

1

粉丝

0

获赞

6

访问

330

头像
成绩排序 题解:为什么只对百分之50啊
P1151 清华大学上机题
发布于2025年2月28日 15:48
阅读数 330

#include <bits/stdc++.h>
using namespace std;
typedef struct {
    string name;
    int sc;
}stu;

int main() {
    int n,order;
    while(cin>>n>>order){
    stu st[n];
    stu t;
    for(int i=0;i<n;i++){
        cin>>st[i].name>>st[i].sc;
    }
    if(order==0)//降序
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
            if(st[i].sc<st[j].sc){
                t.name=st[i].name;
                st[i].name=st[j].name;
                st[j].name=t.name;
     &nbs...

登录查看完整内容


登录后发布评论

2 条评论
16696033405
2025年3月23日 10:47

#include <stdio.h>  // 引入标准输入输出库
#define MAX 1000    // 定义最大学生数量

// 定义学生结构体,包含姓名(最多 10 个字符)和成绩
typedef struct {
    char name[10];
    int grade;
} Stu;

int main() {
    int n, flag;  // 变量 n 存储学生人数,flag 决定排序方式
    Stu stu[MAX]; // 定义学生数组,存储学生信息

    // 读取输入,持续处理多个数据集(适用于多组输入的情况)
    while (scanf("%d %d", &n, &flag) == 2) {
        // 读取 n 个学生的信息(姓名 + 成绩)
        for (int i = 0; i < n; i++) {
            scanf("%s %d", stu[i].name, &stu[i].grade);
        }

        // 使用冒泡排序对学生按照成绩排序
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                // 根据 flag 选择排序顺序
                // flag = 1 表示升序(成绩小的排前面)
                // flag = 0 表示降序(成绩大的排前面)
                if ((flag && stu[j].grade > stu[j + 1].grade) || 
                    (!flag && stu[j].grade < stu[j + 1].grade)) {
                    
                    // 交换 stu[j] 和 stu[j+1] 的位置
                    Stu t = stu[j];
                    stu[j] = stu[j + 1];
                    stu[j + 1] = t;
                }
            }
        }

        // 输出排序后的学生信息
        for (int i = 0; i < n; i++) {
            printf("%s %d\n", stu[i].name, stu[i].grade);
        }
    }

    return 0;  // 程序执行完毕,返回 0 表示正常退出
}
 

赞(0)
快乐小土狗
2025年3月2日 03:24

稳定性排序,相同成绩都按先录入排列在前的规则处理

赞(0)