- ·上一篇:PowerPoint幻灯片画面怎样调比例
- ·下一篇:PowerPoint幻灯片不用模板怎样自己制作
PowerPoint幻灯片怎样同时排班两个方案
1.c语言程序设计,排班问题
/*
B A C C A
B A C B B
C A A C B
B C A A B
A : 7(天)
B : 7(天)
C : 6(天)
Press any key to continue
*/
#include <stdio.h>
#include <string.h>
#define N 3 // 人数
#define M 4 // 周数
int main() {
int ID[N] = {0,1,2}; // 管理员编号
int work[N][5] = {{0,1,1,1,1},{1,0,0,1,1},{1,1,1,1,0}}; // 三位管理员可否值班表
int days[N] = {0}; // 已值班天数
int list[5]; // 周值班表
int week,weekday,who,i,j,k,t;
for(week = 0; week < M; ++week) { // 仅排M个周
memset(list,0,sizeof(list)); // 值班表清零
for(weekday = 0; weekday < 5; ++weekday) { // 每周5个工作日
for(i = 0; i < N - 1; ++i) { // 以值班天数增排序
k = i;
for(j = i + 1; j < N; ++j)
if(days[k] > days[j]) k = j;
if(k != i) {
t = days[k]; days[k] = days[i]; days[i] = t;
t = ID[k]; ID[k] = ID[i]; ID[i] = t; // 同时交换编号
}
}
for(who = 0; who < N; ++who) { // 从排位靠前的开始安排值班
if(work[ID[who]][weekday]) { // 只要该人上班就可以安排
list[weekday] = ID[who];
++days[who];
break;
}
}
}
for(weekday = 0; weekday < 5; ++weekday) // 本周值班表
printf("%c ",list[weekday] + 'A');
printf("\n");
}
for(i = 0; i < N - 1; ++i) { // 以编号增排序
k = i;
for(j = i + 1; j < N; ++j)
if(ID[k] > ID[j]) k = j;
if(k != i) {
t = days[k]; days[k] = days[i]; days[i] = t;
t = ID[k]; ID[k] = ID[i]; ID[i] = t;
}
}
for(who = 0; who < N; ++who) // 最近N周值班天数统计
printf("%c : %d(天)\n",ID[who] + 'A',days[who]);
return 0;
}
