ホームページ >バックエンド開発 >PHPチュートリアル >ジョセフリング問題を解決する一記事(PHP版)
この記事では、PHP バージョンのジョセフ リング問題 (サルが王を選ぶ) を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
ジョセフ・リング問題 (猿が王を選ぶ) PHP 版
ジョセフス問題は、猿が王を選ぶ問題と表現されることもあり、タイトルは次のとおりです。 (ジョセフの質問の原点は最後に掲載します)
猿のグループが円形に並び、1、2、...、n に従って番号が付けられます。
次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、その後ろから数え始め、再び m 番目まで数え、追い出す...というように繰り返します。これは、猿が 1 匹だけ残るまで続き、その猿が王と呼ばれます。
このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。
プログラムを使用してこのプロセスをシミュレートします。コードは次のとおりです:
function monkeyKing($n, $m) { $arr = range(1, $n); //构造一个数组 $i = 1; //从第一个开始循环 while (count($arr) > 1) { //如果总数大于1 if ($i % $m != 0) { $arr[] = $arr[$i - 1]; //不被踢出则压入数组尾部 } unset($arr[$i - 1]); //压入数组然后删除 $i++; //继续循环 } return $arr[$i - 1]; //直至最后剩下一个为大王 } print_r(monkeyKing(5, 3)); //第4只为大王
以下はシミュレーション プロセスです。削除されなかったサルについては、配列の末尾が継続的に追加されます。
$n = 5 $m = 3 $arr = [1, 2, 3, 4, 5] $i $arr ---+------------------------ 1 x 2 3 4 5 1 2 x x 3 4 5 1 2 >3 x x x 4 5 1 2 4 x x x x 5 1 2 4 5 x x x x x 1 2 4 5 >6 x x x x x x 2 4 5 7 x x x x x x x 4 5 2 8 x x x x x x x x 5 2 4 >9 x x x x x x x x x 2 4 10 x x x x x x x x x x 4 2 11 x x x x x x x x x x x 2 4 >12 x x x x x x x x x x x x 4
ジョセフの問題の起源 :
この質問は、1 世紀のユダヤ人歴史家フラビオ ヨセフスにちなんで名付けられました。彼は日記に、自分と40人の仲間が洞窟でローマ軍に包囲されたと書いている。自殺するか捕らえられるか話し合い、最終的には自殺することを決め、くじ引きで誰が誰を殺すかを決めた。最後に残ったのはヨセフスともう一人の男でした。ヨセフスはその男に、彼らはローマ軍に降伏し、二度と自殺はしないだろうと説得した。ヨセフスは自分が生き残ったのは幸運か摂理のせいだと考えたが、どちらであるかは分からなかった。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がジョセフリング問題を解決する一記事(PHP版)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。