求助各位大佬!現在需要寫一個自動排班的程式。
基本情況是這樣的:如果是作業日無需考慮直接排班,如果是周末則需考慮上一次值班這個人是不是排得周末如果是就不能排順延,直到不是周末再排這個人;同理如果是假期則需考慮這個人上一個是不是排的假期,如果是需要順延,直到不是假期再排這個人。
也就是說作業日無需考慮直接排,但是不能連著兩次都值周末也不能連著兩次都值假期。
如何實作呢?
uj5u.com熱心網友回復:
一共幾個人?周六周日需要幾個人上班?作業日需要幾個人上班?uj5u.com熱心網友回復:
作業日只需一個人值晚班但必須男生,假期和周末都需三個人值早中晚,晚班也必須是男生,總共有的人數是100多人。所以一年至少會輪到兩次。
uj5u.com熱心網友回復:
實際情況很復雜說說思路吧
一年365天,就有365個夜班,52個星期,也就是104個周六,104個周日,408個早中班,再加上假期的早中晚班,全部列出來,每個班賦予一個序號。保守估計780個班。
值班字典{序號:*,日期:**,班次:晚班還是早班還是中班,作業日:作業榷訓是休息日}
才100個人,有點少啊。
人員字典{姓名:**,性別:**,第一次值班:**,第二次值班:**。。。。。。}
開始:
遍歷所有夜班,(也可以設定先安排一個月的值班)
判斷夜班是作業榷訓是休息日
如果是作業日
隨機抽取一個男性(篩選值班最少的),將空白的那次值班value設定為值班序號
如果不是作業日
隨機抽取值班最少的男性,判斷上次值班的作業日型別,如果是作業日,就將空白的班次設定為值班序號
夜班排班結束
遍歷其他班次
判斷是不是作業日
是作業日
篩選值班最少的,安排上
不是作業日
篩選值班最少,上次值班是作業日的人,安排上
結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/117990.html
上一篇:c #
