#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;
医院有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。编写程序根据输入的条件输出星期一至星期天的值班人员。输

原文地址: https://www.cveoy.top/t/topic/fDUp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录