问题标题: 酷町堂:酷町堂1487 酷町堂教务管理系统2怎么写?(33)

0
0
已解决
李牧之
李牧之
新手光能
新手光能
#include<bits/stdc++.h>
using namespace std;
struct stu{
    string name;
    int nl;
    int a1;
    int a2;
    int a3;
    int a4;
};
stu a[150];
int bj(int x,int y);
int jh(int x,int y);
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].nl>>a[i].a1>>a[i].a2>>a[i].a3>>a[i].a4;
    }
    for(int i=1;i<=n-1;i++){
        for(int j=i+1;j<=n;j++){
            if (bj(i,j)==1){
                jh(i,j);
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<i<<' '<<a[i].name<<' '<<a[i].a1+a[i].a2+a[i].a3+a[i].a4<<endl;;
    }
    return 0;
} 
int bj(int x,int y){
    if (a[x].a1+a[x].a2+a[x].a3+a[x].a4<a[y].a1+a[y].a2+a[y].a3+a[y].a4) return 1;
    else if (a[x].a1+a[x].a2+a[x].a3+a[x].a4==a[y].a1+a[y].a2+a[y].a3+a[y].a4)
        if (a[x].a1<a[y].a1) return 1;
        else if (a[x].a2<a[y].a2) return 1;
        else if (a[x].a3<a[y].a3) return 1;
        else if (a[x].a4<a[y].a4) return 1;
        else if (a[x].name<a[y].name) return 1;
    return 0;
} 
int jh(int x,int y){
    string t;
    swap(a[x].a1,a[y].a1);
    swap(a[x].a2,a[y].a2);
    swap(a[x].a3,a[y].a3);
    swap(a[x].a4,a[y].a4);
    swap(a[x].nl,a[y].nl);
    t=a[x].name;
    a[x].name=a[y].name;
    a[y].name=t;
    return 0;
}

大佬教我!!!

http://judge.codingtang.com/problem/1487/

顺便再帮我看看这个问题,回答的都看不懂

http://wenda.codingtang.com/questions/1258/


0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

这题我用选择排序做的。

for(int i=1; i<=n; i++)
    {
        cin>>s[i]>>a1>>a2>>a3>>a4>>b[i];
        a[i]=b[i]+a2+a3+a4;
    }
    string t;
    int tmp;
    for(int i=1; i<n; i++)
    {
        for(int j=i; j<=n; j++)
        if(a[i]<a[j]||a[i]==a[j]&&b[i]<b[j]||a[i]==a[j]&&b[i]==b[j]&&s[i]>s[j])
        {
            t=s[i];
            s[i]=s[j];
            s[j]=t;
            tmp=a[i];
            a[i]=a[j];
            a[j]=tmp;
            tmp=b[i];
            b[i]=b[j];
            b[j]=tmp;
        }
    }

0
0
李乐凡
李乐凡
新手光能
新手光能

这题得用选择排序

李乐凡在2018-02-11 10:57:29追加了内容

最好别用万能头文件,会编译超时的

0
张舒斌
张舒斌
中级光能
中级光能

这道题我也是用选择写的;核心代码如下:

    for(i=1;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            if(a[i].sum<a[j].sum)
            {
                swap(a[i],a[j]);
            }
            if(a[i].sum==a[j].sum)
            {
                if(a[i].d<a[j].d)
                {
                    swap(a[i],a[j]);
                }
                if(a[i].d==a[j].d)
                {
                    if(a[i].name>a[j].name)
                    {
                        swap(a[i],a[j]);
                    }
                }
            }
        }
    }

 

0
赵毅恒
赵毅恒
资深守护
资深守护

这道题可以用结构体排序,用快排就行

函数代码如下

struct S{
    string name;
    int age,t1,t2,t3,t4,sum;
};
S s[110];
int b(S a,S b)
{
    if(a.sum!=b.sum)
    return a.sum>b.sum;
    if(a.t4!=b.t4)
    return a.t4>b.t4;
    return a.name<b.name;
}
void qsort(S a[],int l,int r)
{
    S mid=a[(r+l)/2];
    int i=l,j=r;
    while(i<=j)
    {
        while(b(a[i],mid))++i;
        while(b(mid,a[j]))--j;
        if(i<=j)
        {
            swap(a[i],a[j]);
            ++i;--j;
        }
    }
    if(l<j)qsort(a,l,j);
    if(i<r)qsort(a,i,r);
}

就是简单的暴力排序

0
王子凡
王子凡
高级光能
高级光能
int cmp(stu a,stu b)
{
    if (a.zong!=b.zong)
        return a.zong>b.zong;
    if (a.t4!=b.t4)
        return a.t4>b.t4;
    return a.name<b.name;
}
void qsort(stu a[],int l,int r)
{
    int i,j;stu mid;
    i=l; j=r;
    mid=a[(l+r)/2];
    while (i<=j)
    {
        while (cmp(a[i],mid))
            i++;
        while (cmp(mid,a[j]))
            j--;
        if (i<=j)
        {
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }
    if (l<j)
        qsort(a,l,j);
    if (i<r)
        qsort(a,i,r);
}

这题我也是用结构体排序做的

这是核心代码

我要回答