编程问题,很急,后天要交给老师,求大神帮帮忙。拜托各位了
医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一至星期天)每人要轮流值班一天。现在已知:A大夫比C大夫玩一天值班;
D大夫比E大夫晚二天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C大夫的中间,且是星期四;
请确定每天究竟是哪位大夫值班?
要考虑跨周情况,不单单是从星期一开始。
2017-07-30 10:14
程序代码:#include <iostream>
int main( void )
{
char buf[7] = { 0, 0, 0, 0, 'F', 0, 0 };
for( size_t i=0; i!=7; ++i )
{
if( buf[i]==0 && buf[(i+1)%7]==0 )
{
buf[i]='C', buf[(i+1)%7]='A';
for( size_t j=0; j!=7; ++j )
{
if( buf[j]==0 && buf[(j+2)%7]==0 )
{
buf[j]='E', buf[(j+2)%7]='D';
for( size_t k=0; k!=7; ++k )
{
if( buf[k]==0 && buf[(k+3)%7]==0 )
{
buf[k]='B', buf[(k+3)%7]='G';
if( (k<4 && i>4) || (k>4 && i<4) )
std::cout.write(buf,7) << '\n';
buf[k]=0, buf[(k+3)%7]=0;
}
}
buf[j]=0, buf[(j+2)%7]=0;
}
}
buf[i]=0, buf[(i+1)%7]=0;
}
}
}输出 // 从星期日到星期6
程序代码:#include <iostream>
#include <algorithm>
using namespace std;
int main( void )
{
// A B C D E F G
unsigned day[] = { 0,1,2,3,4,5,6 };
do
{
unsigned A = day[0];
unsigned B = day[1];
unsigned C = day[2];
unsigned D = day[3];
unsigned E = day[4];
unsigned F = day[5];
unsigned G = day[6];
if( (C+1)%7 == A // CA
&& (E+2)%7 == D // E?D
&& (B+3)%7 == G // B??G
&& F==4 && ((F>B && F<C) || (F>C && F<B)) ) // B…F(4)…C or C…F(4)…B
{
char doctors[7];
doctors[day[0]] = 'A';
doctors[day[1]] = 'B';
doctors[day[2]] = 'C';
doctors[day[3]] = 'D';
doctors[day[4]] = 'E';
doctors[day[5]] = 'F';
doctors[day[6]] = 'G';
cout.write(doctors,7) << '\n';
}
} while( std::next_permutation(day,day+7) );
}输出 // 从星期日到星期6
2017-07-31 09:09
2017-07-31 16:22
2017-07-31 22:34
2017-07-31 22:47
2017-08-01 16:34