zoukankan      html  css  js  c++  java
  • 结构体排序教学

    排名
    宁波市的小学生们在镇海中学完成程序设计比赛后,老师们批出了所有学生的成绩,成绩按分数从高到低排名,成
    绩相同按年级从低到高排(注:纯属虚构,请勿对号入座)。现在主办单位想知道每一个排名的学生前,有几位学
    生的年级低于他(她)。
    输入
    有若干行:
    第1行只有一个正整数n(1≤n≤200),表示参赛的学生人数。
    第2行至第n+1行共n行,每行有两个正整数s(0≤s≤400),g(1≤g≤6)。
    其中第i+1行的第一个数s表示第i个学生的成绩,第i+1行的第二个数g表示第i个学生的年级。
    输出
    有n行,每行只有一个正整数
    其中第i行的数k表示排第i名的学生前面有k个学生排名比他(她)高,且年级比他(她)低。
    样例输入
    23
    250 4
    220 2
    20 4
    290 2
    370 6
    210 2
    360 1
    180 1
    200 2
    170 3
    50 6
    300 6
    150 1
    400 6
    90 2
    390 6
    100 2
    380 5
    350 2
    310 4
    40 6
    0 6
    320 3
    样例输出
    0
    0
    0
    1
    0
    1
    2
    3
    5
    1
    4
    1
    1
    1
    0
    7
    0
    3
    3
    15
    15
    12
    16

    Sol:多关键字排序

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct cj{
        int nianji;
        int chengji;
       // int wz;
    };
    bool cmp(cj a,cj b)
    {
        if(a.chengji>b.chengji)
        return 1;
        if(a.chengji<b.chengji)
        return 0;
        if(a.nianji<b.nianji)
        return 1;
        else
        return 0;
    }
    cj a[210];
    int v[210];
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i].chengji>>a[i].nianji;
            //a[i].wz=i;
        }
        sort(a+1,a+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            int sum=0;
            for(int j=1;j<i;j++)
            //经过排序后,在i前面的均是成绩高于i的 
            if(a[i].nianji>a[j].nianji)
                sum++;
            v[i]=sum;
        }
        for(int i=1;i<=n;i++)
            cout<<v[i]<<endl;
        return 0;
    }
    

      

    排名
    时间限制 : 1.000 sec 内存限制 : 128 MB
    题目描述
    班上刚测试了几门课,现在信息技术老师要分析一些功课之间的成绩关系,看看每个人的信息技术课排名以及他的
    数学排名,并按信息技术课的成绩从高分到低分排列(数据中保证任意一学科中没有两个人的这门课成绩是一样的
    )。老师把任务交给了信息学最好的你,请你编程完成这个任务。
    输入
    第一行一个整数N,表示共有N个同学的成绩。
    后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩。
    输出
    共N行,每行6个数据,分别对应一个同学的:语文、数学、英语、信息技术成绩和信息技术及数学的排名。

    样例输入
    3
    90 95 89 110
    95 120 78 115
    96 97 103 92
    样例输出
    95 120 78 115 1 1
    90 95 89 110 2 3
    96 87 103 92 3 2

    Sol:应该先讲这个,单关键字排序

    #include<bits/stdc++.h>
    using namespace std;
    struct data{
        int chinese,math,english,it,mathn,itn,number;
    }a[100000];
    bool cmp1(data x,data y){
        return x.math>y.math;
    }
    bool cmp2(data x,data y){
        return x.it>y.it;
    }
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i].chinese>>a[i].math>>a[i].english>>a[i].it;
            a[i].number=i;
        }
        sort(a+1,a+n+1,cmp1); //先按数学成绩排序 
        for(int i=1;i<=n;i++)
             a[i].mathn=i;
        sort(a+1,a+n+1,cmp2); //再接信息技术成绩排名 
        for(int i=1;i<=n;i++)
        {
            cout<<a[i].chinese<<' '<<a[i].math<<' '<<a[i].english<<' '<<a[i].it;
            cout<<' '<<i<<' '<<a[i].mathn<<endl;
        }
        return 0;
    }
    

      

    高校录取
    [命题人 : 外部导入]
    时间限制 : 1.000 sec 内存限制 : 128 MB

    题目描述
    高三全省联合模拟考试刚刚结束,经过各科老师的努力,各个学科的改卷工作终于结束了,每位同学的各科分数也
    已经结算完毕。此时,老师们开始模拟各个高校录取情况。每个大学有自己的录取范围。例如,清华、北大招生约
    为理科全省前100名,复旦、上海交大在全省理科101至300名。老师们想要知道哪些同学可以进入某个名校。可是
    ,统计软件突然失灵,查询和比对工作也无法进行,只有事先已经得到的理科每位同学的各科成绩。现在请你帮助
    老师编写一个程序,显示出可以进入某高校的名单。此次考试理科排名规则:
    1.按照语文、数学、外语、理科综合四门科目总分由高到低排名;
    2.若总分相同,则按照数学成绩由高到低排名;
    3.若总分和数学成绩都相同,按照理科综合成绩由高到低排名;
    4.若总分、数学、理科综合都相同,按照语文成绩由高到低排名;
    5.若总分、数学、理科综合、语文成绩都相同,则按照报名序号从小到大排序(这里报名序号为输入顺序,第1个
    输入就是1号,第100个输入就是100号)。
    输入
    第一行三个整数n,a和b,分别表示参加考试的人数和某高校的录取名次范围(从名次a到名次b)。
    接下来n行,每行4个整数,表示每位同学的每门学科的成绩。依次为语文、数学、英语、综合。成绩0<=x<=300。
    1<=a<=b<=n<=100000
    输出
    输出b-a+1行,排名在a~b名的同学信息。
    每行两个整数,分别为报名序号和总分(报名序号看题目描述),中间用空格分开。
    样例输入 Copy
    6 3 5
    118 139 130 286
    105 130 129 296
    113 138 123 291
    104 133 119 283
    89 139 116 287
    103 127 118 288
    样例输出 Copy
    2 660
    4 639
    6 636
    //【样例1解释】
    排序后由高到低
    序号 总分

    1 118 139 130 286 673

    3 113 138 123 291 665

    2 105 130 129 296 660

    4 104 133 119 283 639

    6 103 127 118 288 636

    5 89 139 116 287 631
    输出3~5名的序号和总分

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    using namespace std;
    struct node
    {
        int chinese;
        int math;
        int english;
        int other;
        int sum;
        int number;
    }people[100001];
    bool cmp(node a,node b)
    {
        if(a.sum>b.sum)return 1;
        if(a.sum<b.sum)return 0;
        if(a.sum==b.sum)
        {
            if(a.math>b.math)return 1;
            if(a.math<b.math)return 0;
            if(a.math==b.math)
            {
                if(a.other>b.other)return 1;
                if(a.other<b.other)return 0;
                if(a.other==b.other)
                {
                    if(a.chinese>b.chinese)return 1;
                    if(a.chinese<b.chinese)return 0;
                    if(a.chinese==b.chinese)
                    {
                        if(a.number<b.number)return 1;
                        if(a.number>b.number)return 0;
                    }
                }
            }
        }
    }
    int main()
    {
        int n,a,b;cin>>n>>a>>b;
        for(int i=1;i<=n;i++)
        {
            people[i].number=i;
            cin>>people[i].chinese>>people[i].math>>people[i].english>>people[i].other;
            people[i].sum=people[i].chinese+people[i].math+people[i].english+people[i].other;
        }
        sort(people+1,people+n+1,cmp);
        for(int i=a;i<=b;i++)
        {
            cout<<people[i].number<<" "<<people[i].sum<<endl;
        } 
        return 0;
    }
    

      

  • 相关阅读:
    Different AG groups have the exactly same group_id value if the group names are same and the ‘CLUSTER_TYPE = EXTERNAL/NONE’
    An example of polybase for Oracle
    use azure data studio to create external table for oracle
    Missing MSI and MSP files
    You may fail to backup log or restore log after TDE certification/key rotation.
    Password is required when adding a database to AG group if the database has a master key
    Use KTPASS instead of adden to configure mssql.keytab
    ardunio+舵机
    android webview 全屏100%显示图片
    glide 长方形图片显示圆角问题
  • 原文地址:https://www.cnblogs.com/cutemush/p/13679986.html
Copyright © 2011-2022 走看看