- 円形に配置されたサルの群、プレス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 IF(COUNT($ 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))。
PHPアルゴリズムの問題
おすすめ
転載: www.cnblogs.com/bneglect/p/12142423.html
おすすめ
ランキング