zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    五子棋人机对战设计
    通过getSystemServices获取手机管理大全
    C#常见错误解决方法
    🍖数据增删改查页面搭建
    🍖django ORM 表关系与django 请求生命周期流程图
    🍖django ORM 简介
    🍖Python与django连接数据库
    🍖静态文件配置与request对象
    开启进程的两种方式
    进程PID 与PPID
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11162133.html
Copyright © 2011-2022 走看看