这道题...?
要出租一个会议室,出租时间为8:00至18:30,每次出租费为1元(出租费与占用多少时间没有关系,只与出租个数有关),若有多个需求,并且每个需求的开始时间和使用时间固定不变,请问怎么求出出租会议室的最大次数。
例如,有6个需求,分别为
8:00 30
9:30 20
9:40 6
10:00 40
14:00 50
14:30 20
格式为开始时间 执行时间。
这是我自己写的一道算法,不知对不,请高人指点一下,谢谢!
#include <stdio.h>
typedef struct lendroom{
int begin;
int end;
}lend;/*设置一个结构体用于存储开始和结束时间*/
void main()
{int hour,min,time,i,j,num,N;
lend a[201];
scanf("%d",&num);
for(i=1;i<=num;i++)
{scanf("%d:%d %d",&hour,&min,&time);
a[i].begin=60*hour+min;
a[i].end=a[i].begin+time;
}/*存储每次出租会议室的开始时间和结束时间,并转换为数字以便比较其大小*/
for(i=2;i<=num;i++)
{j=i-1;
a[0]=a[i];
while(a[0].end<a[j].end)
{a[j+1]=a[j];
j--;
}
a[j+1]=a[0];
}/*用结束时间排序*/
N=1;j=1;
for(i=2;i<=num;i++)
if(a[j].end<=a[i].begin)
{N++;j=i;}/*通过比较产生可以出租的最大数(最早出租的不用比较)*/
printf("%d\n",N);
system("pause");
}
这里假设给出的时间都是正确的,只探讨算法。