C语言编辑(不使用#include<stdbool.h>):编制排班系统 某生产车间有12名员工,编号为: 001、 002、003、 ..012。由于工作需要,在生产旺季取消了周末公休日,即周一至周日均要上班,因此需要实行员工轮休制度。每天安持两人休息,一星期中每人只能休息一天。每个员工可以预先自行选择一个 自认为合适的休息日。请编制程序,打印轮休的所有可能方案。尽可能做到使每个人都满意,保证排班的公平性。
时间: 2024-02-22 14:55:27 浏览: 77
排班系统C语言课程设计.doc
以下是一个简单的 C 语言程序,用于实现该排班系统:
```c
#include <stdio.h>
int main() {
int rest[12] = {0}; // 存储每个员工的休息日,0 表示未安排
int count = 0; // 统计可行的排班方案数
for (int day1 = 1; day1 <= 7; day1++) {
for (int day2 = day1 + 1; day2 <= 7; day2++) {
// 从周一到周日枚举两个休息日
for (int i = 0; i < 12; i++) {
if (rest[i] == 0) {
// 如果该员工未安排休息日,则将其安排在当前两个休息日之一
rest[i] = day1;
for (int j = i + 1; j < 12; j++) {
if (rest[j] == 0) {
// 如果另一个未安排休息日的员工存在,则将其安排在另一个休息日
rest[j] = day2;
count++;
printf("方案 %d:\n", count);
for (int k = 0; k < 12; k++) {
printf("员工 %03d 休息日:%d\n", k + 1, rest[k]);
}
printf("\n");
rest[j] = 0; // 恢复未安排状态,以便尝试其他方案
}
}
rest[i] = 0; // 恢复未安排状态,以便尝试其他方案
}
}
}
}
printf("共有 %d 种可行的排班方案。\n", count);
return 0;
}
```
该程序使用一个长度为 12 的数组 `rest` 存储每个员工的休息日,初始值均为 0,表示未安排。程序从周一到周日枚举两个休息日,然后遍历每个员工,如果该员工未安排休息日,则将其安排在当前两个休息日之一,然后再遍历其他未安排休息日的员工,将其安排在另一个休息日。每次成功安排两个员工休息日后,打印当前方案,并统计可行方案的数量。最终输出所有可行方案的数量。
注意:该程序的输出结果可能会非常多,因为员工的选择组合非常多,如果不想输出所有方案,可以将打印部分的代码注释掉。
阅读全文