结构体排序

简介: 结构体排序

贪心算法中不想交区间问题:题目

解题思路:定义两个变量,一个记为结束时间,一个记为区间数。将结束时间排序,若相同,就将开始时间从大到小排序;若不同,就将结束时间按从小到大排序。这样第一个区间是确定的,再比较下一个区间的开始时间与第一个区间结束时间的大小,大于则加一。再将结束时间改变即可,继续循环。

#include <stdio.h>
#include <algorithm>
using namespace std ;
typedef struct time
{
    int s,f;
}time;
bool cmp(time a,time b)
{
    if(a.f == b.f)
        return a.s > b.s;
    else
        return a.f < b.f;
}
int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        time arr[1005];
        for(int i = 0;i < n;i++)
            scanf("%d %d",&arr[i].s,&arr[i].f);
        sort(arr,arr + n,cmp);
        int ans,last;
        ans = 1;
        last = arr[0].f;
        for(int j = 0;j < n;j++)
        {
            if(last <= arr[j].s)
            {
                ans += 1;
                last = arr[j].f;//注意改变结束时间!
            }             
        }
        printf("%d",ans);
    }
    return 0;
}

再将结构体排序举两个例子

1.摘苹果

Description

小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,小明就会跑去摘苹果。小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

Input

第一行输入N(0<N<100)表示测试数据组数,接下来每组测试输入包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示小明把手伸直的时候能够达到的最大高度。

Output

输出包括一行,这一行只包含一个整数,表示小明能够摘到的苹果的数目。 Sample Input

1

100 200 150 140 129 134 167 198 200 111

110

Sample Output

5

#include <stdio.h>
#include <algorithm>
using namespace std ;
bool cmp(char a,char b)
{
    return a < b;//当从小到大排序时可以不用cmp函数
}
int main()
{
    int N;
    int arr[12];
    while(scanf("%d",&N) != EOF)
    {
        for(int k = 0;k < 2;k++)
        {
            for(int i = 0;i < 10;i++)
            {
                scanf("%d ",&arr[i]);
            }
            int m,h;
            int sum = 0;
            scanf("%d",&m);
            h = m + 30;
            sort(arr,arr + 10,cmp);//sort(数组名,数组名+里面数的个数,cmp)
            for(int j = 0;j < 10;++j)
            {
                if(arr[j] <= h)
                    sum += 1;
            }
            printf("%d\n",sum);
        }
    }
    return 0;
}
2.ASCII码排序

Description

输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。

Input

第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。

Output

对于每组输入数据,输出一行,字符中间用一个空格分开。

Sample Input

2

qwe

asd

Sample Output

e q w

a d s

#include <stdio.h>
#include <algorithm>
using namespace std;
bool cmp(char a,char b)
{
    return a < b;
}
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        char arr[5];//char类型!!
        scanf("%s",arr);//将整个字符串输进去
        sort(arr,arr + 3,cmp);
        printf("%c %c %c\n",arr[0],arr[1],arr[2]);//将每个字符输出来,省的考虑空格问题……
    }
    return 0;
}


相关文章
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
265 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
655 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
325 32
Meta SAM3开源:让图像分割,听懂你的话
|
9天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1512 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
893 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
290 140