これら 3 つの数値の値の範囲は 1 ~ 6 であり、整数である必要があります
最初のケースでは、3 つの数値の合計は 4 ~ 10 の範囲であり、これら 3 つの数値はランダムに生成されます (3 つの数値はすべて繰り返すことができます) 2 番目のケースでは、3 つの数字の合計は 11 から 17 の範囲で、これら 3 つの数字はランダムに生成されます (3 つの数字が完全に繰り返される場合と、それらの数字が繰り返される場合の 2 つの場合があります)。例:
すべての繰り返しが許可されている場合、3 つの数字の合計が 15 の場合、3 つの数字は 5,5,5 になる可能性があり、すべての繰り返しが許可されていない場合は、
3 つの数字は、 4 、 5、 6 または 6、 6、 3 または 3、 6、 6、およびその他の組み合わせのみです
関数を見つけます
// 指定された合計に従って、合計が次の配列を許可するかどうかまったく同じ 3 つの数字を持つ 3 つの数字 ,
//6,6,3 や 3,6,6 など、すべての可能な組み合わせを返すことができる必要があります。
//プログラムでは、考えられるすべての組み合わせのうち 1 つがランダムに返されることだけが必要です。
function get3nums($最初の状況、$ がすべてを繰り返すことができるかどうか)
//たとえば、list($rand1,$rand2,$rand3) = get3nums(2,false);//2 番目の状況、および 3同じ数字は許可されません
//get $rand1=6,$rand2=6,$rand3=3
function get3nums($qingkuang,$ifxiangtong){
}
ディスカッションに返信 (解決策)
最初のケース 数値が 3 つあるため、まず受信値から 2 を減算し、次に最初の数値をランダムに見つけて、剰余を計算します。
$t = $n - 2;
$a = rand(1,min(6,$t));
$t = $n - $a - 1;
$b = rand(1,min(6,$t));
$t = $n - $a - $b;
3 でない場合重複している場合は、重複を判断するステートメントを追加してください
上の変数名が間違っています
function f($n)
{
$t = $n - 2
$a = rand(1,min(6 ,$) t));
$t = $n - $a - 1;
$c = $a - $b; $a,$b,$c);
}
2 番目のケースは最初のケースと同じです
すべてを繰り返すことはできません。戻り値の前に判定を追加するだけです
if($a == $b && $b = = $c)
{
return f($n); }
/** * @$start 范围下限 * @$end 范围上限 * @$repeat 允许重复,默认不允许 **/ function get3nums($start, $end, $repeat=false) { 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); if($repeat) break; }while(count(array_count_values($r)) == 1); return $r;}print_r(get3nums(4, 10));print_r(get3nums(4, 10, 1));print_r(get3nums(11, 17));print_r(get3nums(11, 17, 1));
/** * @$start 范围下限 * @$end 范围上限 * @$repeat 允许重复,默认不允许 **/ function get3nums($start, $end, $repeat=false) { 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); if($repeat) break; }while(count(array_count_values($r)) == 1); return $r;}print_r(get3nums(4, 10));print_r(get3nums(4, 10, 1));print_r(get3nums(11, 17));print_r(get3nums(11, 17, 1));
配列
([0] => 2
[1] => 2
[2] => 4 )
配列
(
[0] => 4
[1] => 1
[2] => 8
)
配列
(
[0] => 2
[1 ] => 1
[2] => 8
)
いいえ、私の数字の多くは 6 より大きいです
わかりますか?
いいえ、私の数字は 1 ~ 6 ですが、あなたの数字の多くは 6 を超えています
3 つの数字の値は 1 ~ 6 でなければなりません。出力は実際には 8 です
/**
* @$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;}
/**
* @$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)){
続き;
}
echo $i.'-'.$j.'-'.$k."
";
}
}
}else{
$n =rand($start, $end);
$avg=$n/3;
if( $avg!=intval($avg)){
echo "値なし"."
";
}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));
?>