各位大哥 求个算法/

值班组5个人员:ABCDE

每周值 一、三、五、七,共四天

每班2人一值

从4月20号开始值班,算出5月23 号 轮到谁值班?
从4月19号开始值班,算出5月30 号 轮到谁值班?

12345678_0001
浏览 415回答 5
5回答

炎炎设计

var staff = new[] { "A", "B", "C", "D", "E" }; //哪些人 var duty = new[] { DayOfWeek.Monday, DayOfWeek.Wednesday, DayOfWeek.Friday, DayOfWeek.Sunday }; //星期几需要有人值班 var group = 2; //每次几个人值班 var count = 0; for (var date = new DateTime(2012, 4, 20); //开始时间 date <= new DateTime(2012, 5, 23); //结束时间 date += TimeSpan.FromDays(1)) { if (duty.Contains(date.DayOfWeek)) { count += group; } } var index = count % staff.Length; 那么最后值班的就是staff数组里index, index+1, ... index+(group-1) 这几个人。把代码里几个地方提取成参数就可以了。

慕无忌1623718

如果没特殊情况,AB\CD\EA\BC\DE的方式循环就好。

收到一只叮咚

上面的人数  值班数 等等都是变量  想写个通用的方法 传入值  得到结果/大哥可以详细点吗?

慕斯王

@MissJacker: 一样的采取这个循环就好。对每个人定义一个最后一次值班的日期信息,每次安排值班人员的时候,一定优先安排休息时间最长的人就好。

aluckdog

取模就行了啊。晚上贴代码。这会下班了。
打开App,查看更多内容
随时随地看视频慕课网APP