ホームページ >バックエンド開発 >PHPチュートリアル >ジョセフリング問題を解決する一記事(PHP版)

ジョセフリング問題を解決する一記事(PHP版)

藏色散人
藏色散人転載
2021-12-31 15:19:564160ブラウズ

この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事はawaimai.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。