D2161(结构体中包含位置信息的情况)

Description

有一天,N名社员参加了基础知识测试,现在测试名单上有每名社员的信息:姓名(纯英文字符串,且长度<=1000)、c语言、数据结构、英语成绩(0<=成绩<=150)。而三门科目的权重分别为50%,30%,20%,求加权后总分最高的学生,请按加权后的数据从大到小输出各项信息(姓名、各科成绩)。(如果总分相同,位置前的在前面)

Input

第一行输入一个正整数N(1<=N<=1000),表示社员个数。

第二行开始往下N行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示c语言、数据结构、英语成绩。均用空格相隔。

Output

排序后的名单

姓名 c语言 数据结构 英语

Sample Input

4
zyh 100 100 100
lxc 150 150 150
wyz 150 150 150
sda 99 80 30

Sample Output

lxc 150 150 150
wyz 150 150 150
zyh 100 100 100
sda 99 80 30

问题

  1. 用下面的代码通过了样例,但无法AC,为什么呢?
#include<bits/stdc++.h>
using namespace std;
 
typedef struct student{
    string name;
    double c;
    double s;
    double e;
    double aver;
}ST;
 
bool cmp(ST a,ST b)
{
    return a.aver>b.aver;
}
 
int main()
{
    int n,i;
    cin >> n;
    ST a[n];
    for(i=0;i<n;i++)
    {
        cin >> a[i].name >> a[i].c >> a[i].s >> a[i].e;
        a[i].aver = 0.5*a[i].c + 0.3*a[i].s + 0.2*a[i].e;
    }
    sort(a,a+n,cmp);
    for(i=0;i<n;i++)
    {
        cout << a[i].name << ' ' << a[i].c <<' ' << a[i].s << ' ' << a[i].e << endl;
    }
}

—>因为sort排序是不稳定排序,当结构体没有位置信息时,2个同学总分相同,sort函数可能将它们交换也可能不将它们交换

总结

  1. 用sort是不稳定排序,用sort对结构体排序时,如果希望待比较数据(用于排序依据的数据)一样时,位置前的在前面,就需要在结构体中加入位置信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值