当前位置:首页经验技巧Ppt经验ppt幻灯

PowerPoint幻灯片怎样同时排班两个方案

2026-01-05 10:54:32

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;

}


免责声明:本站信息来自网络收集及网友投稿,仅供参考,如果有错误请反馈给我们更正,对文中内容的真实性和完整性本站不提供任何保证,不承但任何责任,谢谢您的合作。
版权所有:五学知识网 Copyright © 2015-2026 www.z8000w.com. All Rights Reserved .