问题引入
代码实现
#include<iostream>
using namespace std;
struct Meeting{
int num;
float start;
float end;
int flag;
};
void printMeeting(struct Meeting*meet,int n){
int i=0;
if(!meet||n<=0){
return;
}
for(i=0;i<n;i++){
printf("DATA:%d:\n",meet[i].num);
printf("\tstart:%f\n",meet[i].start);
printf("\tend:%f\n",meet[i].end);
printf("\tflag:%d\n",meet[i].flag);
}
}
int main(int argc,char**argv){
int i=0,j=0;
struct Meeting meet[10]={
{1,8,10,0},
{2,9,11,0},
{3,10,15,0},
{4,11,14,0},
{5,13,16,0},
{6,14,17,0},
{7,15,17,0},
{8,17,18,0},
{9,18,20,0},
{10,16,19,0}
};
printMeeting(meet,10);
for(i=0;i<10;i++){
for(j=0;j<10-i-1;j++){
if(meet[j].end>meet[j+1].end){
struct Meeting temp=meet[j];
meet[j]=meet[j+1];
meet[j+1]=temp;
}
}
}
printf("进行排序后\n");
printMeeting(meet,10);
int time_start=8,time_end=20;
int now=time_start;
for(i=0;i<10;i++){
if(meet[i].start>=now&&meet[i].end<=time_end){
meet[i].flag=1;
now=meet[i].end;
}else if(meet[i].end>time_end){
break;
}
}
printf("会议序列为:\n");
for(i=0;i<10;i++){
if(meet[i].flag){
printf("\t%d",meet[i].num);
}
}
return 0;
}
程序输出
DATA:1:
start:8.000000
end:10.000000
flag:0
DATA:2:
start:9.000000
end:11.000000
flag:0
DATA:3:
start:10.000000
end:15.000000
flag:0
DATA:4:
start:11.000000
end:14.000000
flag:0
DATA:5:
start:13.000000
end:16.000000
flag:0
DATA:6:
start:14.000000
end:17.000000
flag:0
DATA:7:
start:15.000000
end:17.000000
flag:0
DATA:8:
start:17.000000
end:18.000000
flag:0
DATA:9:
start:18.000000
end:20.000000
flag:0
DATA:10:
start:16.000000
end:19.000000
flag:0
进行排序后
DATA:1:
start:8.000000
end:10.000000
flag:0
DATA:2:
start:9.000000
end:11.000000
flag:0
DATA:4:
start:11.000000
end:14.000000
flag:0
DATA:3:
start:10.000000
end:15.000000
flag:0
DATA:5:
start:13.000000
end:16.000000
flag:0
DATA:6:
start:14.000000
end:17.000000
flag:0
DATA:7:
start:15.000000
end:17.000000
flag:0
DATA:8:
start:17.000000
end:18.000000
flag:0
DATA:10:
start:16.000000
end:19.000000
flag:0
DATA:9:
start:18.000000
end:20.000000
flag:0
会议序列为:
1 4 6 8 9
--------------------------------
Process exited after 0.1396 seconds with return value 0
请按任意键继续. . .