以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 数组中查找同时有空的时间,并将结果输出。如果某个班级在某个时间段没有排课,则认为该班级此时有空闲。
输出的结果格式为 星期 几 上课时间,其中星期和上