医生排班
2018-11-26 本文已影响0人
唯一的one
医院内科有A,B,C,D,E,F,G共7位医生,没人在一周内要值一次夜班,排班的要求是:
(1)A医生值日比C医生晚1天
(2)D医生值日比E医生晚2天
(3)B医生值日比G医生早3天
(4)F医生值日在B医生和C医生值班日之间,且在周四
请编写程序,输出每位医生的值班日。
第一种方法:


int a, b, c, d, e, f = 4, g;
for (a = 1; a <= 7; a++)
for (b = 1; b <= 7; b++)
if (a == b) continue;
else
for (c = 1; c <= 7; c++)
if (a != c + 1 || a == c || b == c) continue;
else
for (d = 1; d <= 7; d++)
if (a == d || b == d || c == d) continue;
else
for (e = 1; e <= 7; e++)
if (d != e + 2 || a == e || b == e || c == e || d == e) continue;
else
for (g = 1; g <= 7; g++)
{
if ((a == c + 1) && (d == e + 2) && (b == g - 3) && (f > b && f < c)
&& (a != f) && (b != f) && (c != f) && (d != f) && (e != f) && (g != f)
&& (a != g) && (b != g) && (c != g) && (d != g) && (e != g))
{
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(g);
}
}
第二种方法:

int a, b, c, d, e, f = 4, g;
for (a = 0; a < 8; a++)
{
c = a - 1;
b = 8 - c;
g = b + 3;
for (d = 0; d < 8; d++)
{
e = d - 2;
if (b > 0 && c > 0 && e > 0 && g > 0 && b < 8 && c < 8 && e < 8 && g < 8)
{
if (a != b && a != c && a != d && a != e && a != f && a != g
&& b != c && b != d && b != e && b != f && b != g
&& c != d && c != e && c != f && c != g
&& d != e && d != f && d != g
&& e != f && e != g
&& f != g)
{
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(g);
}
}
}
}