算法记录---关于c++的类的运用(会议安排)

//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;

struct Meet{
	int beg;//会议开始的时间 
	int end;//会议结束的时间
	int num;//记录会议的编号 
}meet[1000];

class setMeet{
	public:
		void init();
		void solve();
	private:
		int n,ans;//n会议总数,ans最大的安排会议总数 
};

void setMeet::init()//读入数据
{
	int s,e,i;
	cout<<"输入会议总数:"<<endl;
	cin>>n; 
	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;//如果结束时间相等,就对开始时间进行降序排序 
	return x.end<y.end;//否则就按结束时间的升序进行排序 
}

void setMeet::solve()
{
	sort(meet,meet+n,cmp);//对会议按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=0;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();//贪心算法求解 
	return 0;
}

这题适用的算法思想依旧是贪心的思想,可能内部贪心稍微有些复杂,但也不影响理解,但这里我主要想学习的是关于class类的完美运用,c++底子一般,一定要好好学习并利用好类,不能只会结构体,将他们结合起来用是最好的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值