用C语言编写一个程序,要求能每周自动对14个人进行排班,每个班次2人,一天5个班次...
时间: 2023-12-14 22:35:38 浏览: 97
以下是一个基于C语言的自动排班程序,可以每周对14个人进行排班,每个班次2人,一天5个班次:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_PEOPLE 14
#define NUM_SHIFTS 5
#define PEOPLE_PER_SHIFT 2
int main()
{
int schedule[NUM_SHIFTS][PEOPLE_PER_SHIFT];
int people[NUM_PEOPLE];
int i, j, k, temp, flag;
// 初始化人员列表
for (i = 0; i < NUM_PEOPLE; i++) {
people[i] = i + 1;
}
// 初始化排班表
srand(time(NULL));
for (i = 0; i < NUM_SHIFTS; i++) {
flag = 0;
while (!flag) {
// 随机选取2个人员
for (j = 0; j < PEOPLE_PER_SHIFT; j++) {
k = rand() % NUM_PEOPLE;
temp = people[k];
people[k] = people[NUM_PEOPLE - 1];
people[NUM_PEOPLE - 1] = temp;
schedule[i][j] = temp;
NUM_PEOPLE--;
}
// 检查选中的人员是否在同一个班次已经出现过
if (schedule[i][0] != schedule[i][1]) {
flag = 1;
} else {
// 如果选中的人员已经在同一个班次出现过,则重新选择
people[NUM_PEOPLE] = schedule[i][1];
people[NUM_PEOPLE - 1] = schedule[i][0];
NUM_PEOPLE += 2;
}
}
}
// 输出排班表
printf("本周排班表如下:\n");
for (i = 0; i < NUM_SHIFTS; i++) {
printf("第%d天:\t", i + 1);
for (j = 0; j < PEOPLE_PER_SHIFT; j++) {
printf("%d\t", schedule[i][j]);
}
printf("\n");
}
return 0;
}
```
程序的基本思路是,先初始化人员列表,然后随机选取2个人员作为一个班次的排班人员,并检查这两个人员是否在同一个班次已经出现过,如果是,则重新选择。最后输出排班表。
阅读全文