医院有A、B、C、D、E、F、G 7位大夫在一星期内星期一至星期天每人要轮流值班一天如果已知:1A大夫比C大夫晚1天值班;2D大夫比E大夫晚1天值班;3E大夫比B大夫早2天值班4B大夫比G大夫早4天值班;5F大夫比B大夫晚1天值班;6F大夫比C大夫早1天值班;7F大夫星期四值班。就可以确定周一至周日的值班人员分别为:E、D、B、F、C、A、G。编写程序根据输入的条件输出星期一至星期天的值班人员。输
#include <stdio.h>
int main() { int n; int schedule[7]; // 存储每天值班的医生编号 int i, j, k, l, m, p, q;
// 初始化值班表
for (i = 0; i < 7; i++) {
schedule[i] = -1; // -1 表示该天无人值班
}
scanf("%d", &n);
for (i = 0; i < n; i++) {
char doc1, doc2, op;
int days;
scanf(" %c%c%c%d", &doc1, &op, &doc2, &days);
// 将字符编号转换为数组下标
int index1 = doc1 - 'A';
int index2 = doc2 - 'A';
if (op == '>') {
// doc1 晚于 doc2
schedule[index1] = schedule[index2] + days;
} else {
// doc1 早于 doc2
schedule[index1] = schedule[index2] - days;
}
}
// 处理条件7:F大夫星期四值班
schedule['F' - 'A'] = 3;
// 处理条件3:E大夫比B大夫早2天值班
schedule['E' - 'A'] = schedule['B' - 'A'] - 2;
// 处理条件2:D大夫比E大夫晚1天值班
schedule['D' - 'A'] = schedule['E' - 'A'] + 1;
// 处理条件5:F大夫比B大夫晚1天值班
schedule['F' - 'A'] = schedule['B' - 'A'] + 1;
// 处理条件6:F大夫比C大夫早1天值班
schedule['C' - 'A'] = schedule['F' - 'A'] - 1;
// 处理条件1:A大夫比C大夫晚1天值班
schedule['A' - 'A'] = schedule['C' - 'A'] + 1;
// 处理条件4:B大夫比G大夫早4天值班
schedule['B' - 'A'] = schedule['G' - 'A'] + 4;
// 输出值班表
for (i = 0; i < 7; i++) {
int max_index = 0;
// 找到最小的值班日期对应的医生编号
for (j = 1; j < 7; j++) {
if (schedule[j] < schedule[max_index]) {
max_index = j;
}
}
// 输出对应的医生编号,并将该医生的值班日期设为一个极大值
printf("%c ", 'A' + max_index);
schedule[max_index] = 100;
}
printf("\n");
return 0;
原文地址: https://www.cveoy.top/t/topic/fDUp 著作权归作者所有。请勿转载和采集!