医院内科七名医生值班,根据规定给出排班表

1.初始代码,根据条件一一进行赛选

#include<iostream>
using namespace std;
int main()
{
	enum weekay{sun,mon,tue,wed,thu,fri,sat
	};
	int a,b,c,d,e,f,g;
	f=thu;
	for(a=sun;a<=sat;a++)
		for(b=sun;b<=sat;b++)
			for(c=sun;c<=sat;c++)
				for(d=sun;d<=sat;d++)
					for(e=sun;e<=sat;e++)
						for(g=sun;g<=sat;g++)
							if((a==c+1)&&(c==d+3)&&(d==e+2)&&(g==b+2)&&(((f<b)&&(f>c))||((f>b)&&(f<c))))
								cout<<a<<','<<b<<','<<c<<','<<d<<','<<e<<','<<f<<','<<g<<endl;
	return 0;
}

运行结果出现某个人一星期排到两天,说明错误。

2.在上面代码的基础上进行进一步赛选,优化

 

#include<iostream>
using namespace std;
int main()
{
	enum weekay{sun,mon,tue,wed,thu,fri,sat
	};
	int a,b,c,d,e,f,g;
	f=thu;
	for(a=sun;a<=sat;a++)
		if(a!=f)
		for(b=sun;b<=sat;b++)
			if((b!=a)&&(b!=f))
			for(c=sun;c<=sat;c++)
				if((c!=a)&&(c!=b)&&(c!=f))
				for(d=sun;d<=sat;d++)
					if((d!=a)&&(d!=b)&&(d!=c)&&(d!=f))
					for(e=sun;e<=sat;e++)
						if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d)&&(e!=f))
						for(g=sun;g<=sat;g++)
							if((g!=a)&&(g!=b)&&(g!=c)&&(g!=d)&&(g!=e)&&(g!=f))
								if((a==c+1)&&(c==d+3)&&(d==e+2)&&(g==b+2)&&(((f<b)&&(f>c))||((f>b)&&(f<c))))
									cout<<a<<','<<b<<','<<c<<','<<d<<','<<e<<','<<f<<','<<g<<endl;
	return 0;
}

运行结果正确,但是不容易理解代码且输出的是数字不是英文。

if语句执行了117649次,程序耗时长。

3.在上一步的基础上再一次优化。

#include<iostream>
using namespace std;
int main()
{
	enum weekay{sun,mon,tue,wed,thu,fri,sat
	};
	int a,b,c,d,e,f,g;
	f=thu;
	for(a=sun;a<=sat;a++)
		if(a!=f)
		for(b=sun;b<=sat;b++)
			if((b!=a)&&(b<f))
			for(c=sun;c<=sat;c++)
				if((c!=a)&&(c!=b)&&(c>f)&&(a==c+1))
				for(d=sun;d<=sat;d++)
					if((d!=a)&&(d!=b)&&(d!=c)&&(d!=f)&&(c==d+3))
					for(e=sun;e<=sat;e++)
						if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d)&&(e!=f)&&(d==e+2))
						for(g=sun;g<=sat;g++)
							if((g!=a)&&(g!=b)&&(g!=c)&&(g!=d)&&(g!=e)&&(g!=f)&&(g==b+2))
								cout<<a<<','<<b<<','<<c<<','<<d<<','<<e<<','<<f<<','<<g<<endl;
	return 0;
}

运行结果正确,if语句执行了1140次,比之前好。但是应当将数字转换成对应星期数。

4.进一步优化

#include<iostream>
using namespace std;
int main()
{
	enum weekay{sun,mon,tue,wed,thu,fri,sat
	};
	int day;
	int a,b,c,d,e,f,g,loop;
	char ch='A';
	f=thu;
	for(a=sun;a<=sat;a++)
		if(a!=f)
		for(b=sun;b<=sat;b++)
			if((b!=a)&&(b<f))
			for(c=sun;c<=sat;c++)
				if((c!=a)&&(c!=b)&&(c>f)&&(a==c+1))
				for(d=sun;d<=sat;d++)
					if((d!=a)&&(d!=b)&&(d!=c)&&(d!=f)&&(c==d+3))
					for(e=sun;e<=sat;e++)
						if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d)&&(e!=f)&&(d==e+2))
						for(g=sun;g<=sat;g++)
							if((g!=a)&&(g!=b)&&(g!=c)&&(g!=d)&&(g!=e)&&(g!=f)&&(g==b+2))
								for(loop=0;loop<7;loop++)
								{
									cout<<"Doctor"<<char(ch+loop)<<":";
									switch(loop+1)
									{
										case 1:day=a;break;
										case 2:day=b;break;
										case 3:day=c;break;
										case 4:day=d;break;
										case 5:day=e;break;
										case 6:day=f;break;
										case 7:day=g;break;
									}
									switch(day)
									{
										case 0:cout<<"Sunday"<<endl;break;
										case 1:cout<<"Monday"<<endl;break;
										case 2:cout<<"Tuesday"<<endl;break;
										case 3:cout<<"Wednesday"<<endl;break;
										case 4:cout<<"Thurday"<<endl;break;
										case 5:cout<<"Friday"<<endl;break;
										case 6:cout<<"Saturday"<<endl;break;
									}
									
								}
	return 0;
}

 

运行结果正确,并且格式正确。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值