用c语言编写以下程序:某生产车间有12名员工,编号为:001、002、003、…、012。由于工作需要,在生产旺季取消了周末公休日,即周一至周日均要上班,因此需要实行员工轮休制度。每天安排两人休息,一星期中每人只能休息一天。每个员工可以预先自行选择一个自认为合适的休息日。请编制程序,打印轮休的所有可能方案。尽可能做到使每个人都满意,保证排班的公平性。
时间: 2024-02-12 12:02:17 浏览: 71
以下是用C语言编写的程序,实现员工轮休制度的排班方案:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_EMPLOYEES 12
#define NUM_REST_DAYS 7
int main() {
int rest_days[NUM_EMPLOYEES]; // 存储每个员工选择的休息日
int schedule[NUM_REST_DAYS][2]; // 存储每天休息的两名员工编号
// 初始化每个员工选择的休息日
for (int i = 0; i < NUM_EMPLOYEES; i++) {
rest_days[i] = i % NUM_REST_DAYS;
}
// 遍历每天需要排班的两个员工
for (int i = 0; i < NUM_REST_DAYS; i++) {
int rest_count = 0; // 当前已排班的员工数量
// 遍历所有员工,找到可以休息的员工
for (int j = 0; j < NUM_EMPLOYEES && rest_count < 2; j++) {
if (rest_days[j] == i) { // 如果员工选择的休息日是当前日期
schedule[i][rest_count] = j + 1; // 将员工编号加1存入排班表中
rest_count++; // 已排班的员工数量加1
}
}
}
// 输出排班表
printf("轮休方案如下:\n");
for (int i = 0; i < NUM_REST_DAYS; i++) {
printf("第%d天:员工%d、员工%d休息\n", i + 1, schedule[i][0], schedule[i][1]);
}
return 0;
}
```
程序中使用两个数组分别存储每个员工选择的休息日和每天休息的两名员工编号。首先,初始化每个员工选择的休息日,让每个员工依次选择周一到周日中的一天作为休息日。然后,遍历每天需要排班的两个员工,从所有员工中找到可以休息的员工,并将其编号存入排班表中。最后,输出排班表即可。
注意,程序中的员工编号从1开始,而不是从0开始。因此,存储员工编号时需要加1,输出时也需要将员工编号减1。
阅读全文