2.用C语言编制排班系统 某生产车间有12名员工,编号为:001、002、003、……、012。由于工作需要,在生产旺季取消了周末公休日,即周一至周日均要上班,因此需要实行员工轮休制度。每天安排两人休息。要求:一星期中每人只能休息一天!且每个员工可以预先自行选择一个自认为合适的休息日!请编制程序,打印轮休的所有可能方案。尽可能做到使每个人都满意,保证排班的公平性。
时间: 2024-02-25 15:54:22 浏览: 134
以下是用C语言编写的排班系统代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define EMPLOYEE_NUM 12
int main()
{
int rest[EMPLOYEE_NUM] = {0}; // 记录每个员工休息的日期
int schedule[7][2] = {0}; // 记录每天休息的员工编号
int week[7] = {0, 1, 2, 3, 4, 5, 6}; // 记录一周的日期,0表示周日,1~6分别表示周一到周六
int i, j, k, t, temp;
// 让每个员工选择一个自己合适的休息日
printf("请每个员工依次输入一个自己合适的休息日(0表示周日,1~6分别表示周一到周六):\n");
for (i = 0; i < EMPLOYEE_NUM; i++) {
printf("员工%03d:", i + 1);
scanf("%d", &rest[i]);
}
// 枚举所有可能的排班方案
for (i = 0; i < 7; i++) {
for (j = i + 1; j < 7; j++) {
// 初始化休息日记录
for (k = 0; k < EMPLOYEE_NUM; k++) {
rest[k] = 0;
}
// 记录当天休息的员工
schedule[i][0] = schedule[i][1] = -1;
schedule[j][0] = schedule[j][1] = -1;
// 让每个员工选择一个自己合适的休息日
for (k = 0; k < EMPLOYEE_NUM; k++) {
printf("员工%03d的休息日:", k + 1);
scanf("%d", &rest[k]);
}
// 枚举12个员工,按照其选择的休息日进行排班
for (k = 0; k < EMPLOYEE_NUM; k++) {
// 找到该员工选择的休息日
for (t = 0; t < 7; t++) {
if (rest[k] == week[t]) {
break;
}
}
// 如果该员工今天休息,记录其编号
if (t == i || t == j) {
if (schedule[i][0] == -1) {
schedule[i][0] = k;
} else {
schedule[i][1] = k;
}
}
}
// 检查排班是否符合要求
int flag = 1;
for (k = 0; k < EMPLOYEE_NUM; k++) {
int rest_count = 0;
for (t = 0; t < 7; t++) {
if (rest[k] == week[t]) {
rest_count++;
}
}
if (rest_count != 1) {
flag = 0;
break;
}
}
if (flag) {
// 打印符合要求的排班方案
printf("\n符合要求的排班方案:\n");
for (k = 0; k < 7; k++) {
printf("周%d:员工%03d、员工%03d\n", k, schedule[k][0] + 1, schedule[k][1] + 1);
}
}
}
}
return 0;
}
```
这个程序会让每个员工依次输入一个自己合适的休息日,然后枚举所有可能的排班方案,并检查排班是否符合要求(即一星期中每个人只能休息一天)。如果符合要求,则会打印出该排班方案。
阅读全文