PHPアルゴリズムの問題

  1. 円形に配置されたサルの群、プレス1,2、...、nは番号が付けられています。その後、Mの最初の数字、番号から1を開始するだけで、それは、このように最後まで繰り返し行う、...とだけでキックm個に、それの後ろから始まり、次いで数、円を蹴っこれまでのところ唯一の猿は、猿は王と呼ばれています。このプロセスは、シミュレーションプログラム、入力M、N、最後の王の数の出力を必要とします。
    。1 <?PHP
     2  
    。3  / * *************
     。4  *猿の検索王
     。5  ************* * / 
    。6  
    。7  関数 searchMonkeyKing(int型$メートル配列 $サル8。 {
     9。     // $ $ Nレンジサル=(1);
     10      //ますprint_r($サル);
     11      余り//のM%Nサルで蹴ら得られた、との裏デジタルシフト、先頭に移動し、操作を引き継ぐし続けます。このサイクル
    12は、     $ LEN = COUNT$サル);
     13である     $ removeIndex = $ M$ LEN?== 0($ lenを。 - 1):($ M$ LEN - 1); // 除去要素のインデックスは0である特別な場合を法
     14      移動させる素子アレイの端部まで除去される//次の要素素子はアレイの端部に移動される前に(これはシフトと等価である)除去素子を開始
    15      $ behindMonkeys = array_slice$サル$ removeIndex + 1。);
     16      // ますprint_r($ behindMonkeys)
    。17      未設定のサル$ [ $ removeIndex ]);
     18      // $ frontMonkeys = array_diff($サル、$ behindMonkeys); //この関数を使用しないでください、元の配列要素の重複がないので、これは、結果が影響します
    19      $ frontMonkeys = array_slice$サル、0、$ removeIndex);   // 元の配列は同じ要素を持っている場合、より多くの保険を、この機能を使用する
     20      //ますprint_r($ frontMonkeys);
     21      //と、2つのアレイをステッチ、それがなかったシフト効果
    22は     $ newMonkeys = array_merge$ behindMonkeys$ frontMonkeys );
     23である     // ますprint_r($ newMonkeys);
     24      アレイが一つだけの要素が返されたときとき//再帰は、その後に使用することができます。
    25      IFCOUNT$ newMonkeys)== 1 ){
     26が         $ monkeyKing = $ newMonkeys [0 ];
     27      } さもなければ{
     28          $ monkeyKing = searchMonkeyKing($ M$ newMonkeys );
     29      }
     30      リターン $ monkeyKing ;
     31である }
     32  
    33である // ますprint_r(searchMonkeyKing(5、[1,2,3,4,5,6])。); 
    34のIS  
    35  関数 generateArray(INT $ M、INT $ N- 36  {
     37 [      IF$ N- <= 1 ){
     38が         リターン 'よりも大きい整数を入力してください' ;
     39      }
     40      $配列 = 範囲(1、$ N )。
    41      $ monkeyKing = searchMonkeyKing($ M$配列)。
    42      リターン $ monkeyKing 43  }
     44  
    45  ますprint_r(generateArray(5,1))。
    見つけること猿王

     

おすすめ

転載: www.cnblogs.com/bneglect/p/12142423.html