成绩排序

【T4】

题目(from 清华大学): 输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。

  • 输入描述:

    输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

  • 输出描述:

    按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开。

  • 示例1

    输入:
    3
    0
    fang 90
    yang 50
    ning 70

    输出:
    fang 90
    ning 70
    yang 50

这道题真是难以描述——解题十分钟,通过十小时。
解题思路:建立一个结构体具有名字和成绩两个属性,建立其对象数组,对其分数进行冒泡排序,需要注意的是:题目中提到相同成绩都按先录入排列在前的规则处理,所以本来想只写一次冒泡排序,然后根据规则从头打印或者从尾打印的想法就被pass掉了。

重点重点重点来了!!!为啥一直通不过。。。原因是:
这个平台的测试实例是这样的:

3
0
fang 90
yang 50
ning 70
2
1
fa 93
gao 55
5
0
fang 90
yang 50
ning 70
fei 33
wang 68

但是我以为是这样的(一次测试仅一个案例):
3
0
fang 90
yang 50
ning 70

这下终于知道为啥总是判定我输出为空或者输出不全了。。。
利用一个while循环来读入并且进行判断就解决了555(找了三个同学都没商量出来为啥,最后还是奕哥对比通过代码发现的问题,结果她的结论就是再也不在牛客网上做题了dswl)

PS: 但我现在还不清楚平台到底对不同的类型怎么测试,有摸清楚套路的可爱可以教教我嘛。。。

代码实现:

#include<iostream>
using namespace std;

struct Student{
    string name;
    int score;
};
int main(){
    
    int num,t;
    while(cin>>num>>t){
         Student stu[num];
    for(int i=0;i<num;i++){
        cin.ignore();
        cin>>stu[i].name>>stu[i].score;
    }
    
    
    if(t==0){//降序  先是最大的
         for(int i=0;i<num-1;i++){
            for(int j=0;j<num-i-1;j++){
                if(stu[j].score<stu[j+1].score){
                    Student s=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=s;
                }
            }
        }
    }else if(t==1){
        for(int i=0;i<num-1;i++){
            for(int j=0;j<num-i-1;j++){
                if(stu[j].score>stu[j+1].score){
                    Student s=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=s;
                }
            }
        }
    }

     for(int i=0;i<num;i++){
        cout<<stu[i].name<<" "<<stu[i].score<<endl;
    }
    }
    
   
    return 0;
}

这道题从“妈耶,我会做”的欢喜到一直通不过还找不出bug想自闭到我现在开了,开学快乐大葛们!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值