3 つの数値の合計が範囲内にある場合、3 つの数値を見つけます

WBOY
リリース: 2016-06-23 13:36:48
オリジナル
1069 人が閲覧しました

これら 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 を減算し、次に最初の数値をランダムに見つけて、剰余を計算します。
たとえば、

function f($n)

{

$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;

$b = rand(1,min(6,$t));

$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));
ログイン後にコピー
ログイン後にコピー




いいえ、1 ~ 6 の数字の多くは 6 を超えています

配列

(

[0] => 2

[1] => 2

[2] => 4
)
[0] => 1
[1] => 1

[2 ] = > 2

)
配列
(
[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));
?>



危険な発言もまた非常に多く、11,17 は 6 を示しており、理想的ではありません。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート