双色球大乐透彩票开奖号码预测项目,感觉是高级~
项目一看就挺不靠谱啊,坑终端客户类型,或者说为了提高社区人气而做的机器预测单,为了软妹币,接单了。。
可是,按任务要求弄到了100%的时候,客户说了没问题,交付了,结果说有问题,说预测号码不是理想的号码。
原来给我任务的人是一个中介,而真正的客户需求是:想要做到小钱覆盖大的中奖范围。
比如双色球6+1,要求在33+16个里面选出22+8个来进行组合,得到大概30组14+4的复式投注。
后来经过反复测试,这个需求无法实现啊,至少我无法实现。
数学不太好,只能经过编程暴力测试,测试后发现,比如22+8一共有1000组6+1的组合,而2组11+8可不能完全覆盖掉这1000组6+1的组合,因为这2组11+8里面会有很多重复的6+1。
当需求是将一组22+8折合为多组14+4来达到完全覆盖22+8的6+1开奖,可能至少有几万种甚至几十万种组合才能覆盖掉这一组,当所有的14+4生成的6+1生成的开奖号码去重后,就是一组22+8
好吧,这是吐槽下客户这个需求不合理吧。。。
代码是截取的thinkphp控制器函数,数组暴力组合函数是网上找的。自己需要把dump之类的换成var_dump
/** * @param $arr 需要组合数组 * @param int $num 组合元素个数 * @return array */ private function getSequenceAry($arr,$num=1) { $count = count($arr); //获取当前数组的元素个数 $min = min($count,$num); //获取最小的 允许组合的数组元素个数 if($min<1){ //如果允许组合的数组元素个数小于1, 则没有必要组合 return false; } $return =[]; //返回结果用 $arrRet = []; $max = $count-($min-1); for($i=0;$i<$max;$i++){ $this->getSequenceArySub($arr,$count,$min,$i,$arrRet,$return); } return $return; } private function getSequenceArySub($arr,$count,$min,$i,$arrRet=[],&$return){ if(empty($arr) || empty($count)) return false; if(1==$min){ $arrRet[--$min] = $arr[$i]; $return[] = $arrRet; }else{ $arrRet[--$min] = $arr[$i]; for($j = $i+1;$j<($count);$j++){ $this->getSequenceArySub($arr,$count,$min,$j,$arrRet,$return); } } unset($arr); unset($arrRet); } public function get_combinations($arrays) { $result = array(array()); foreach ($arrays as $property => $property_values) { $tmp = array(); foreach ($result as $result_item) { foreach ($property_values as $property_value) { $tmp[] = array_merge($result_item, array($property => $property_value)); } } $result = $tmp; } return $result; } //运行这个方法 public function test(){ ini_set('memory_limit', '1024M'); $memory=ini_get('memory_limit'); dump('已申请内存:'.$memory); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35'); $red_array=explode(',','A,B,C,D'); $red_array=explode(',','A,B,C,D,E,F,G,H,I,G,K,L,M,N,O,P,Q'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18'); $red_array=explode(',','1,2,3,4,5,6,7'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10'); $red_array=explode(',','1,2,3,4,5,6,7,8,9'); $red_array=explode(',','1,2,3,4,5,6,7,8,9,10'); //注意,数组个数越大,服务器性能消耗越大,这里用10个红球举例 $red_array=explode(',','1,2,3,4,5,6,7,8,9,10'); $red_ok=[]; $temp_str = ''; $ok_int=6; //开奖中奖 $red_ok=$this->getSequenceAry($red_array,$ok_int); dump('双色球红区需要的中奖个数:'.$ok_int); dump('红区需组合的原始数据:'.count($red_array).'个 '.implode(',',$red_array)); dump('-------------:'); dump('红区可组合的中奖数据数量:'.count($red_ok)); dump('红区组合样本预览:'); $red_ok_string=[]; foreach ($red_ok as $item){ $temp_string=implode(',', $item); dump($temp_string); $red_ok_string[]=$temp_string; } dump('-------------:'); $blue_array=explode(',','A,B,C,D'); $blue_array=explode(',','A'); $a = array('red-box' => $red_ok_string, 'blue-box' => $blue_array); $result=$this->get_combinations($a); dump('蓝区原始数据:'.count($blue_array).'个 '.implode(',',$blue_array)); dump('双色球 红区+蓝区域 可组合的中奖数据数量:'.count($result)); dump('双色球 红区+蓝区域 可组合样本预览:'); foreach ($result as $item){ $temp_string='红:'.$item['red-box'].' 蓝:'.$item['blue-box']; dump($temp_string); } }
扫描二维码推送至手机访问。
版权声明:本文由大牙的博客发布,如需转载请注明出处。
如果您有合作项目您可以选择留言给我,或加QQ 22707370 ,邮件 mail@95jw.cn