当前位置:Gxlcms > PHP教程 > 三个数的和在一个范围里,求3个数

三个数的和在一个范围里,求3个数

时间:2021-07-01 10:21:17 帮助过:8人阅读

3个数的和在一个范围里,求3个数
这3个数的取值范围是1-6,必定是整数

第一种情况,3个数的和取值范围4-10,随机产生这3个数(分3个数可以全部重复和不可以全部重复两种情况)

第二种情况,3个数的和取值范围11-17,随机产生这3个数(分3个数可以全部重复和不可以全部重复两种情况)


举例说明:
如果允许全部重复,那么如果3个数的和是15,那么3个数可能是5,5,5,而如果不允许全部重复,
3个数只可能是4,5,6或,6,6,3或3,6,6之类的组合

求一个函数,

//根据给出的和,和是否允许3个数完全相同3个数的数组,
//要求必须能否返回所有可能的组合,比如6,6,3和3,6,6都必须有可能返回。
//程序只要求随机返回所有可能性组合之一即可。
function get3nums($第几种情况,$是否允许全部重复)
//比如list($rand1,$rand2,$rand3) = get3nums(2,false);//第二种情况,且3个数字不允许全部相同
//得到$rand1=6,$rand2=6,$rand3=3

function get3nums($qingkuang,$ifxiangtong){



------解决思路----------------------
/**
* @$start 范围下限
* @$end 范围上限
* @$repeat 允许重复,默认不允许
**/
function get3nums($start, $end, $repeat=false) {
if(!$repeat){
$n =rand($start, $end); //取得指定范围中的一个数
for($i=1;$i<7;$i++){
for($j=1;$j<7;$j++){
$k=$n-$i-$j;
if($k<7 &&$k>0){
if(($i==$j and $j==$k)){
continue;
}
echo $i.'-'.$j.'-'.$k."
";
}
}
}
}else{
$n =rand($start, $end);
$avg=$n/3;
if( $avg!=intval($avg)){
echo "no value"."
";
}else{
echo $avg.'-'.$avg.'-'.$avg."
";
}
}
}

print_r(get3nums(4, 10));
echo '
';
print_r(get3nums(4, 10, 1));
echo '
';
print_r(get3nums(11, 17));
echo '
';
print_r(get3nums(11, 17, 1));
?>

------解决思路----------------------
再检查一下就是了
function get3nums($start, $end, $repeat=false) {
do {
do {
$r = array();
$n = rand($start, $end); //取得指定范围中的一个数
$a = intval($n/3);
$r[] = rand(1, min($a, 6));
$r[] = rand(1, min($a, 6));
$r[] = $n - array_sum($r);
}while(max($r) > 6);
if($repeat) break;
}while(count(array_count_values($r)) == 1);
return $r;
}

人气教程排行