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;
}
运行结果正确,并且格式正确。