为了账号安全,请及时绑定邮箱和手机立即绑定

各位大哥 求个算法/

各位大哥 求个算法/

12345678_0001 2018-12-06 14:07:33
值班组5个人员:ABCDE每周值 一、三、五、七,共四天每班2人一值从4月20号开始值班,算出5月23 号 轮到谁值班?从4月19号开始值班,算出5月30 号 轮到谁值班?
查看完整描述

5 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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) 这几个人。把代码里几个地方提取成参数就可以了。

查看完整回答
反对 回复 2019-01-21
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-01-21
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-01-21
?
慕斯王

TA贡献1864条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-01-21
?
aluckdog

TA贡献1847条经验 获得超7个赞

取模就行了啊。晚上贴代码。这会下班了。

查看完整回答
反对 回复 2019-01-21
  • 5 回答
  • 0 关注
  • 414 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信