首页 新闻 会员 周边

各位大哥 求个算法/

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-11 11:21

值班组5个人员:ABCDE

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

每班2人一值

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

MissJacker的主页 MissJacker | 初学一级 | 园豆:59
提问于:2012-05-18 15:58
< >
分享
最佳答案
1
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) 这几个人。把代码里几个地方提取成参数就可以了。

收获园豆:15
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-05-18 17:31
其他回答(1)
0

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

收获园豆:3
无之无 | 园豆:5095 (大侠五级) | 2012-05-18 16:09

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

支持(0) 反对(0) MissJacker | 园豆:59 (初学一级) | 2012-05-18 16:24

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

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-05-18 16:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册