双色球大乐透彩票开奖号码预测项目,感觉是高级~
项目一看就挺不靠谱啊,坑终端客户类型,或者说为了提高社区人气而做的机器预测单,为了软妹币,接单了。。
可是,按任务要求弄到了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





