検索

phpジョセフ問題の解き方

Mar 28, 2018 am 11:26 AM
php解決する

「ジョセフリング」は数学の応用問題です。猿のグループが円形に並び、1、2、...、n に従って順番に番号が付けられます。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、後ろから数え始め、m 番目まで数え、追い出します...このようにして最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。

PHP を使用してこの問題を解決する 3 つの方法を以下に示します:

  1. 論理的な順序で削除

  2. 再帰アルゴリズム

  3. 線形テーブルのアプリケーション

方法 1、論理的な順序で

function getKingMokey($n, $m)  
{  
    $monkey[0] = 0;  
    //将1-n只猴子顺序编号 入数组中
    for($i= 1; $i<= $n; $i++)   
    {   
        $monkey[$i] = $i;  
    }  
    $len = count($monkey);  
    //循环遍历数组元素(猴子编号)
    for($i= 0; $i< $len; $i= $i)  
    {  
        $num = 0;  
        /* 
         * 遍历$monkey数组,计算数组中值不为0的元素个数(剩余猴子的个数) 
         * 赋值为$num,并获取值不为0的元素的元素值 
        */
        foreach($monkeyas$key => $value)   
        {   
           if($value == 0) continue;   
           $num++;   
           $values = $value;   
        }  
        //若只剩一只猴子 则输出该猴子编号(数组元素值) 并退出循环 
        if($num == 1)   
        {   
            return$values;  
            exit;   
        }  
        /*  
         * 若剩余猴子数大于1($num > 1)  
         * 继续程序  
        */
        //将第$i只猴子踢出队伍(相应数组位置元素值设为0) 
        $monkey[$i] = 0;  
        /* 
         * 获取下一只需要踢出队伍的猴子编号 
         * 在$m值范围内遍历猴子 并设置$m的计数器 
         * 依次取下一猴子编号 
         * 若元素值为0,则该位置的猴子已被踢出队伍 
         * 若不为0,继续获取下一猴子编号,且计数器加1 
         * 若取得的猴子编号大于数组个数 
         * 则从第0只猴子开始遍历(数组指针归零) 步骤同上 
         * 直到计数器到达$m值 * 最后获取的$i值即为下一只需要踢出队伍的猴子编号 
         */
        //设置计数器 
        for($j= 1; $j<= $m; $j++)   
        {   
            //猴子编号加一,遍历下一只猴子 
            $i++;  
            //若该猴子未被踢出队伍,获取下一只猴子编号 
            if($monkey[$i] > 0) continue;  
            //若元素值为0,则猴子已被踢出队伍,进而循环取下一只猴子编号 
            if($monkey[$i] == 0)   
            {   
                //取下一只猴子编号 
                for($k= $i; $k< $len; $k++)  
                {   
                    //值为0,编号加1 
                    if($monkey[$k] == 0) $i++;  
                    //否则,编号已取得,退出 
                    if($monkey[$k] > 0) break;  
                }   
             }  
            //若编号大于猴子个数,则从第0只猴子开始遍历(数组指针归零) 步骤同上 
            if($i == $len) $i = 0;  
            //同上步骤,获取下一只猴子编号
            if($monkey[$i] == 0)   
            {   
                for($k= $i; $k< $len; $k++)   
                {  
                    if($monkey[$k] == 0) $i++;  
                    if($monkey[$k] > 0) break;  
                }   
            }   
        }  
    }  
}  
//猴子个数 
$n = 10;  
//踢出队伍的编号间隔值 
$m = 3;  
//调用猴王获取函数
echo getKingMokey($n, $m)."是猴王";  
方法二,递归算法
[php] view
 plain copy
function killMonkey($monkeys , $m , $current = 0){  
    $number = count($monkeys);  
    $num = 1;  
    if(count($monkeys) == 1){  
        echo$monkeys[0]."成为猴王了";  
        return;  
    }  
    else{  
        while($num++ < $m){  
            $current++ ;  
            $current = $current%$number;  
        }  
        echo$monkeys[$current]."的猴子被踢掉了<br/>";  
        array_splice($monkeys , $current , 1);  
        killMonkey($monkeys , $m , $current);  
    }  
}  
$monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10); //monkeys的编号
$m = 3; //数到第几只猴子被踢出
killMonkey($monkeys , $m);
    、線形テーブルアプリケーション
  1. function yuesefu($n,$m) {    
        $r=0;    
        for($i=2; $i<=$n; $i++) {  
            $r=($r+$m)%$i;    
        }  
        return$r+1;    
    }    
    echo yuesefu(10,3)."是猴王";
を削除します

以上がphpジョセフ問題の解き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
@KeyFramersでNavbar Nudging@KeyFramersでNavbar NudgingApr 17, 2025 am 10:09 AM

先日、キーフレマーで注目のゲストになりました。 BjörgvinPéturSigurjónssonによるドリブルショットを見て、ゆっくりと構築しました。

CSSセキュリティの脆弱性CSSセキュリティの脆弱性Apr 17, 2025 am 10:02 AM

その見出しを読んで心配しないでください。 CSSは特に危険なセキュリティ上の懸念であるとは思わないので、ほとんどの場合、私はあなたがする必要があるとは思わない

スパへの他の方法スパへの他の方法Apr 17, 2025 am 10:01 AM

それはlolzを韻を踏んだ。

ビルドレスに行くビルドレスに行くApr 17, 2025 am 10:00 AM

私は長距離関係にあります。つまり、私は数週間ごとにイギリスへの飛行機に乗っています。

テクニカルライティングのアドバイステクニカルライティングのアドバイスApr 17, 2025 am 09:51 AM

信じられないほどのテクニカルライターとスマッシングマガジンの編集長であるレイチェルアンドリューとの最近のポッドキャストの前に、私はたくさんの考えを集め、

PostCSS関数を使用して、レスポンシブワークフローを自動化しますPostCSS関数を使用して、レスポンシブワークフローを自動化しますApr 17, 2025 am 09:48 AM

少し前に、このCSS-Tricksの記事にぶつかったかもしれません。そこでは、RFSを使用してレスポンシブフォントサイズを自動化するためにミックスインを使用する方法を説明しました。

一部のHTMLは「オプション」です一部のHTMLは「オプション」ですApr 17, 2025 am 09:46 AM

ソースHTMLとIT&#039;のまだ有効なマークアップを除外できるさまざまなHTMLがあります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。