• NOIP2007 奖学金 结构体排序


    是结构体排序的练习题,可供选手们巩固结构体排序的一些相关内容。

    关于结构体排序

    1.结构体定义

    struct student
    {
        int num,a,b,c,sum;
    }p[310];

    2.结构体初始化

    for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
            p[i].num=i;
            p[i].sum=p[i].a+p[i].b+p[i].c;
        }

    3.sort函数实现结构体排序

    首先要知道sort函数在算法库里。 也就是

    #include<algorithm>

    具体使用方法如下,假如要给0-i的a数组按从小到大排序。

    sort(a,a+i);

    这里要注意,sort函数默认排序顺序是从小到大!! 但是有些同学(比如说我)喜欢空出0号位数组,从1开始读入,该咋排? 很简单:

    sort(a+1,a+i+1);

    4.cmp自定义函数

    bool cmp(student a,student b)
    {
        /*code*/
    }
    bool cmp(student a,student b)
    {
        if(a.sum!=b.sum)
            return a.sum>b.sum;
        else if(a.a!=b.a)
            return a.a>b.a;
        else
            return a.num<b.num;
    }

    好的,现在这道水题练习题就可以随随便便A掉了。 最后上AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    struct student
    {
        int num,a,b,c,sum;
    }p[310];
    bool cmp(student a,student b)
    {
        if(a.sum!=b.sum)
            return a.sum>b.sum;
        else if(a.a!=b.a)
            return a.a>b.a;
        else
            return a.num<b.num;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
            p[i].num=i;
            p[i].sum=p[i].a+p[i].b+p[i].c;
        }
        sort(p+1,p+n+1,cmp);
        for(int i=1;i<=5;i++)
            printf("%d %d
    ",p[i].num,p[i].sum);
        return 0;
    }

     

  • 相关阅读:
    ASP.NET MVC 以Stream 下载文件
    ITextSharp 初次接触
    Easyui中tree组件实现搜索定位功能及展开节点定位
    lodop 打印控件的使用
    XML IList<T> TO DataSet TO DataTable 相互转换
    JSONToObejct 问题 part 1
    可以动态添加图片的轮播插件
    防止机器注册
    sqlServer 取每组的前几条数据
    log4net 动态设定日志文件名
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11162133.html
Copyright © 2020-2023  润新知