输入上课者理论课表和学生课表,进行上机课(一周一节)的排课,输出上课者和学生上机课排课课表

以0和1,输入上课者和六个班的课表(一周七天每天有五节课),找上课者和班级同学同时有空的时间安排上机课,输出上课者和学生的上机课课表。


c
复制代码
#include <stdio.h>

int main() {
    // 用二进制数表示每个班级的时间表
    int timetable[6] = {0b1100011111, 0b1100111111, 0b1100111111, 0b1100011111, 0b1100011111, 0b1100111111};
    int available_time[5] = {0}; // 存储上课者每天有空的时间
    int i, j, k;
    char *days[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    char *times[5] = {"8:00-9:40", "10:00-11:40", "12:00-13:40", "14:00-15:40", "16:00-17:40"};

    // 输入上课者空闲时间
    printf("请输入上课者空闲时间(0 表示有空,1 表示没空):\n");
    for (i = 0; i < 5; i++) {
        printf("%s:", times[i]);
        scanf("%d", &available_time[i]);
    }
    
    // 查找同时有空的时间
    printf("可以上机课的时间:\n");
    for (i = 0; i < 7; i++) {
        for (j = 0; j < 5; j++) {
            int is_available = 1; // 是否有班级已经排过课了
            for (k = 0; k < 6; k++) {
                if (((timetable[k] >> (i * 10 + j)) & 1) == 1) {
                    is_available = 0;
                    break;
                }
            }
            if ((available_time[j] == 0) && is_available) {
                printf("%s %s\n", days[i], times[j]);
            }
        }
    }

    return 0;
}

该代码使用了一个长度为 6 的数组 timetable,每个元素表示一个班级的空闲时间表。用二进制数来表示每天每节课的空闲情况,0 表示有空,1 表示没有空。

首先程序会要求用户输入上课者在每个时间段是否有空闲,将其存储在 available_time 数组中。

然后程序会在 timetable 数组中查找同时有空的时间,并将结果输出。如果某个班级在某个时间段没有排课,则认为该班级此时有空闲。

输出的结果格式为 星期 几 上课时间,其中星期和上