编程问题,很急,后天要交给老师,求大神帮帮忙。拜托各位了
医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一至星期天)每人要轮流值班一天。现在已知:A大夫比C大夫玩一天值班;
D大夫比E大夫晚二天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C大夫的中间,且是星期四;
请确定每天究竟是哪位大夫值班?
要考虑跨周情况,不单单是从星期一开始。
#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