前回の記事「PHPランダムピックワンアルゴリズム(1)」では、PHPピックワンアルゴリズムの面接の質問について簡単に紹介しました。次に、前回の内容を組み合わせて、PHP アルゴリズムを詳しく説明します。
問題は次のとおりです:
サルのグループが円形に並び、1 に従って順番に番号が付けられます。 2、...、n。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、後ろから数え始め、m 番目まで数え、追い出します...このようにして最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。
ソリューション コードの例は次のとおりです。
<?php function king($n, $m){ $monkeys = range(1, $n); //创建1到n数组 $i=0; while (count($monkeys)>1) { //循环条件为猴子数量大于1 if(($i+1)%$m==0) { //$i为数组下标;$i+1为猴子标号 unset($monkeys[$i]); //余数等于0表示正好第m个,删除,用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]); //如果余数不等于0,则把数组下标为$i的放最后,形成一个圆形结构 unset($monkeys[$i]); } $i++;//$i 循环+1,不断把猴子删除,或 push到数组 } return current($monkeys); //猴子数量等于1时输出猴子标号,得出猴王 } echo king(10,3);
ここではメソッド King を作成します。パラメーター $n は n 匹のサルを表し、$m は m 番目までのカウントを表します。猿。次に、king メソッド本体で、まず range 関数を使用して 1 から n までの配列を作成し、$monkeys を使用してそれを受け取ります。次に、while ループを使用して、要件を満たす要素を特定します。
while ループの条件は、モンキー $monkeys の数が 1 より大きい場合にループ本体が実行されることです。ループ本体で、if...else を使用して ($i 1)%$m==0 かどうか、つまり、剰余が 0 に等しい場合、つまり m 番目のモンキーがカウントされるかどうかを判断し、次に unset を使用してこの要素を削除し、添字関係を維持します。
剰余が 0 に等しくない場合は、array_push 関数を使用して配列添字 $i を最後に配置し、循環構造を形成します。 array_push 関数は、1 つ以上の要素を配列の末尾にプッシュする (プッシュ) ために使用されます。
最後に、$i を 1 回ループさせて猿を連続的に削除するか、猿の数が 1 になったら猿のラベルを出力し、猿の王を取得します。
上記のメソッドでは、指定するパラメーターは 10 と 3 で、出力結果は次のようになります。
4
は、取得された猿の王が 4 というラベルの付いた猿であることを意味します。 。
この記事の PHP 1 つ選択アルゴリズムの紹介はここで終わります。次の記事「PHP ランダムに 1 つ選択するアルゴリズム (3)」では、Xdebug を使用して、次のことを行う方法を紹介します。 run このメソッドの実装をデバッグします。
以上がPHP ランダム選択アルゴリズム (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。