高级钟点秘书——会议安排

C++源码:

#include<iostream>
#include<algorithm>
#include<conio.h>
using namespace std;
struct Meet{
	int beg;
	int end;
	int num;
}meet[100];
class setMeet{
public:
	void init();
	void solve();
private:
	int n,ans;//n代表会议总数,ans代表最大的会议安排总数
};
void setMeet::init()
{
	int s,e;//会议开始和结束时间
	cout<<"输入会议总数n=:"<<endl;
	cin>>n;
	int i;
	cout<<"输入会议开始时间和结束时间,以空格分开:"<<endl;
	for(i=0;i<n;++i)
	{
		cin>>s>>e;
		meet[i].beg=s;
		meet[i].end=e;
		meet[i].num=i+1;
	}
}
bool cmp(Meet x,Meet y){
	if(x.end==y.end){
		return x.beg>y.beg;
	}
	else
		return x.end<y.end;
}
void setMeet::solve(){
	sort(meet,meet+n,cmp);
	cout<<"排完序的会议时间如下:"<<endl;
	int i;
	cout<<"会议编号"<<"  开始时间  "<<"  结束时间  "<<endl;
	for(i=0;i<n;i++)
	{
		cout<<"  "<<meet[i].num<<"\t\t"<<meet[i].beg<<"\t"<<meet[i].end<<endl;
	}
	cout<<"-----------------------------------------------"<<endl;
	cout<<"选择会议的过程:"<<endl;
	cout<<"  选择第"<<meet[0].num<<"个会议"<<endl;//选中了第一个会议
	ans=1;
	int last=meet[0].end;
	for(i=1;i<n;++i)
	{
		if(meet[i].beg>=last)
		{
			//如果会议i的开始时间大于最后一个选中的会议的结束时间,则:
			ans++;
			last=meet[i].end;
			cout<<"  选择第"<<meet[i].num<<"个会议"<<endl;
		}
	}
	cout<<"最多可以安排"<<ans<<"个会议"<<endl;
}
int main(){
	setMeet sm;
	sm.init();//读入数据
	sm.solve();//贪心算法求解
	getch();
	return 0;
}

python源码:

beg=[]#会议开始时间
end=[]#会议结束时间
num=[]#会议编号
n=int(input("请输入会议总个数n="))
print("请输入每个会议的开始时间beg和结束时间end,输入时用空格隔开!")
for i in range(n):
    s,e=(input("该会议开始时间beg & 结束时间end :").split())
    beg.append(int(s))
    end.append(int(e))
    num.append(i+1)
meeting=[[end[i],beg[i],num[i]] for i in range(n)]
print("每个会议对应的结束时间、开始时间、会议编号如下:\n",meeting)
# def cmp(a,b):
#     for i in range(n):
#         if meeting[i][0]==meeting[i+1][0] :
#             return meeting[i][1]>meeting[i+1][1]
#         else:
#             return meeting[i][0]<meeting[i+1][0]

meeting.sort()
print("每个会议按照最早结束时间(若会议结束时间相同)排序后,每个会议对应的结束时间、开始时间、会议编号如下:\n",meeting)
last=meeting[0][0]
ans=1#代表已安排的会议个数
print("选中第一个会议后,相容会议按照最早结束时间(若会议结束时间相同)排序后,每个会议对应的结束时间、开始时间、会议编号如下:")
print("会议编号     开始时间    结束时间    选择过程")
print("  ",meeting[0][2],"\t\t",meeting[0][1],"\t\t\t",meeting[0][0],"\t\t",end="")
print("选择第%d个会议"%meeting[0][2])
for i in range(1,n):
    if meeting[i][1]>=last:
        ans+=1
        last=meeting[i][0]
        print("  ",meeting[i][2],"\t\t",meeting[i][1],"\t\t\t",meeting[i][0],"\t\t",end="")
        print("选择第%d个会议"%meeting[i][2])
print("----------------------------------------")
print("贪心选择,最多可以安排%d个会议"%ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古剑诛仙

你的鼓励是我创造的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值