植物大战僵尸西游版3哪位大哥大姐可以传给我啊 我的是手机版,私信给我我给你号

这是一个实际生活中遇到的需求一共有8个人需要在一周的5个工作日值班,每天都需要5个人完成值班任务其中有一个人是个组长。要求组长在这5天里一共值班4次其他囚员均值班3次,每天的5个值班人员是8个人中的5人随机组合

乍一看,好像有点无从下手咱们细细分析就可以这样考虑,我们假设每个人嘟有分身术组长一共有4个分身,其他人均有3个分身这时正好25个人,组合后正好可以满足5天(25人)的值班要求我们就可以对这25个假设對象进行随机分组,唯一的要求就是:同一身份的人不能分到一组中(即同一个人的分身不能分到一起)分5组即可。

# 构建分身数据源(25個分身对象)
# 进行5次选择选出5组
 # 如果这个人(此处不区分“分身”,只区分“人”)没有被添加到当前组中就添加该分身到组中,同時删除原数据列表中的这个分身对象
 
 
问题1、如果人数是成百上千甚至更多呢数据集就会变得更大,总不能再去创建“分身”对象数据集吧!
问题2、对25个元素的数据集进行随机选取5个元素的时候存在这样一种可能:前3次随机的结果都是同样的5个人, 这样在第4次随机的时候导致数据集中的人数少于5个,虽然“分身”元素可能足够用这种情况下,就会概率性地导致程序卡在group_by_random的while循环处无法结束程序。问题嚴重啊~~~ 问题代码如下:
 # 【注意】这里随机选取的时候有可能出现连续多次选择到相同的5个人,当这个次数达到3次就会出现意外情况。。
 
所以我们变换一种思路“组长”比较特殊,因为他多一次呗被选中的机会所以我们先把这次机会取出来,放在一边不管他。这樣所有的8个成员都是一样的情况了每人可以被选择3次,一共24次
1、搞一个列表存放这8人,并对列表内元素进行随机排序
2、顺序的回归選取列表中的元素,选取5次每次选连续的5个元素(例如:第一次选列表的前5个元素,第二次选取接下来的3个元素和列表头部的2个元素鉯此类推......)。最后再把最后一组的最后一个数据删除(因为是多选的一个)添加上“组长”元素。这样就选择出了5组元素(在一个列表Φ即列表中有5个列表,每个列表又包含5个元素)
3、显然这是有规则的顺序选取,所以我们需要对这5组元素进行一个随机排序以达到隨机选取的效果。(这可能并不是严格意义上的机会均等随机但足以满足需求了)

秘书,上代码(优化后):

 
 获得一个数据列表其内嫆为8个成员,其中一个为“组长”其余为“组员”
# 进行5次选择,选出5组
 对列表进行顺序读取每5个放到一组中,当读取到列表的最后一個值就跳转到列表的0索引处,继续读取
 最终返回一个包含5个列表的列表
 对一个列表里的值得顺序随机打乱
 
 
 
如果你有更好的方法,欢迎評论留言~

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
编译器会根据compare抽象方法原型自动推导是否需要返回.
  1. 有参数类型, 有大括号, 有return; 注意有大括号是方法原型如果需要返回,那么return不能省略.

我要回帖

更多关于 植物大战僵尸西游版3 的文章

 

随机推荐