用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法
主要原理是,將數組從大到小排序,數組1先取數取第一個,數組2第2取第2個,以此類推
取完第一次數組之后,判斷下數組1,數組2,進行一次排序,將數據最大的排前面(理論上來說,數組1數據最大,因為從大到小排序)
當數組1是最大時,讓數組1取倒數第一個值(最小值),數組2取倒數第2個值,以此類推
這時候,數組1取得是最小,數組2取的是第二小,會讓總數開始慢慢的接近,以此類推
下面是一個n個數字分2組的實例代碼,分x組的可以自己寫咯<?php
function?group_arr($arr_count,?$max_num)
{
$arr?=?array();
for?($i?=?0;?$i?
$arr[]?=?mt_rand(0,?$max_num);
}
rsort($arr);
//var_dump($arr);
//從大到小排序一下
$total?=?array_sum($arr);
//var_dump($total);
$arr1?????=?array();
$arr2?????=?array();
$arr1_sum?=?0;
$arr2_sum?=?0;
$mean?????=?$total?/?2;//平均數
$arr_arr?=?$arr;
for?($i?=?0;?$i?
//????????var_dump($arr_arr);
if?($arr1_sum?>?$arr2_sum)?{
$arr1_sum?+=?$arr1[]?=?$arr_arr[count($arr_arr)-1];
array_splice($arr_arr,-1,1);//數組刪除元素重排
$arr2_sum?+=?$arr2[]?=?$arr_arr[count($arr_arr)-1];
array_splice($arr_arr,-1,1);//數組重排
}?else?{
$arr1_sum?+=?$arr1[]?=?$arr_arr[0];
array_splice($arr_arr,0,1);//數組重排
$arr2_sum?+=?$arr2[]?=?$arr_arr[0];
array_splice($arr_arr,0,1);//數組重排
}
}
echo?'
數組:'?.?json_encode($arr);
echo?'
總數:'?.?array_sum($arr);
echo?'
arr1數組:'?.?json_encode($arr1);
echo?'
arr1:'?.?array_sum($arr1);
echo?'
arr2數組:'?.?json_encode($arr2);
echo?'
arr2:'?.?array_sum($arr2);
echo?'
arr總數:'?.(?array_sum($arr1)+array_sum($arr2));
}
group_arr(10,?100);
注意,這個算法思路取到的不一定是最接近的值,只能說是相對接近并且數字越多精度越高,以下是10個100隨機數分2組的測試圖
本文為仙士可原創文章,轉載無需和我聯系,但請注明來自仙士可博客www.php20.cn
總結
以上是生活随笔為你收集整理的用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: oracle ora01732,一天一小
- 下一篇: 三年质保,内存条问题不用怕
