C语言编程。某生产车间有12名员工,编号为: 001、002、 003、 ... 012。由于工作需要,在生产旺季取消了周末公休日,即周一至周日均要上班,因此需要实行员工轮休制度。每天安排两人休息,一星期中每人只能休息一天。每个员工可以预先自行选择-一个自认为合适的休息日。请编制程序,打印轮休的所有可能方案。尽可能做到使每个人都满意,保证排班的公平性。
时间: 2024-02-11 13:08:14 浏览: 165
以下是一个使用C语言编写的员工轮休制度程序:
```c
#include <stdio.h>
int main()
{
int rest[12][7] = {0}; // 存储每个员工的休息情况,初始值都为0
int count = 0; // 记录休息日总数
int day = 0; // 记录当前排班的日期(0-6表示周一到周日)
while (count < 84) // 一星期中每个员工都要休息一天,因此总共需要排班84天
{
int n = 0; // 记录当前休息人数
int rest_list[2] = {0}; // 记录当前休息的员工编号
for (int i = 0; i < 12; i++)
{
if (rest[i][day] == 0) // 如果当前员工还没有选择休息日
{
printf("员工%d,请选择您的休息日(周一到周日分别用数字1到7表示):", i + 1);
scanf("%d", &rest[i][day]); // 让员工选择休息日
}
if (rest[i][day] == day + 1) // 如果当前员工选择了今天休息
{
rest_list[n] = i + 1;
n++;
}
if (n == 2) // 如果已经有两个人选择休息
{
break;
}
}
if (n == 2) // 如果有两个人选择休息
{
printf("第%d天,员工%d和员工%d休息\n", day + 1, rest_list[0], rest_list[1]);
count += 2;
}
else // 如果只有一个人选择休息
{
for (int i = 0; i < 12; i++)
{
if (rest[i][day] == 0) // 如果当前员工还没有选择休息日
{
rest[i][day] = day + 1; // 让他休息
printf("第%d天,员工%d休息\n", day + 1, i + 1);
count++;
break;
}
}
}
day = (day + 1) % 7; // 更新日期
}
return 0;
}
```
程序的核心思想是:让每个员工在每个星期中选择一个自己认为合适的休息日,然后按照日期轮流排班,每次排班时选择两个人休息,如果有两个人选择了当前日期休息,则直接排班;如果只有一个人选择了当前日期休息,则让他休息,并且把其他人中没有选择休息日的人中选择一个让他休息,这样可以保证每个人都能在一星期中休息一天,并且尽可能做到让他们都满意。
阅读全文