文章

36

粉丝

0

获赞

4

访问

10.9k

头像
成绩排序2.0 题解:c
P1159 清华大学上机题
发布于2024年3月7日 14:24
阅读数 470

#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <string.h>
//object:按照成绩升序排列,成绩相同则按照学号升序排列
struct student{
    int number,score;
}data[1000],temp;

int main(void){
    int n,j,u;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++) scanf("%d %d",&data[i].number,&data[i].score);
        for(int i=1;i<n;i++){
            if((data[i].score<data[i-1].score)){  //如果这一项的分数小于前一项
                temp = data[i];
                for(j=i-1;j>=0&&data[j].score>temp.score;j--){
                    data[j+1].score = data[j].score;
                    data[j+1].number = data[j].number;
                }
                data[j+1].number = temp.number;
                data[j+1].score = temp.score;
                
                if(data[j+1].score==data[j].score){
                    if(data[j+1].number < data[j].number){  //判断学号大小
                        temp = data[j+1];
          ...
登录查看完整内容


登录后发布评论

8 条评论
snake
2024年3月7日 14:59

分数相同的时候学号排序逻辑有问题

赞(0)

williams : 回复 snake: 哥 我试过很多数据了,输出的都是对的。实在是想不通了

2024年3月7日 15:34

snake : 回复 williams: 3 1 5 2 5 3 5

2024年3月7日 16:09

williams : 回复 snake: 哥 3 1 5 2 5 3 5 这样我试过了,没问题,分数相同的时候我反复试了好几组,都没问题

2024年3月7日 18:01

snake : 回复 williams: 如果学生的成绩相同,则按照学号的大小进行从小到大排序。

2024年3月7日 18:24

williams : 回复 snake: 是的呀 哥,从小到大,没错呀,3 3 80 2 80 1 80,您这样输入看看,一点毛病没有呜呜呜

2024年3月7日 20:10

snake : 回复 williams: 8 1 5 3 5 2 4 4 4 2 5 1 4 3 3 2 3

2024年3月7日 21:13

williams : 回复 snake: ok了哥 谢谢

2024年3月8日 13:05