ホームページ  >  記事  >  バックエンド開発  >  猿王問題アルゴリズムの PHP 実装例_PHP チュートリアル

猿王問題アルゴリズムの PHP 実装例_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:56:391186ブラウズ

猿の選択王問題をphpで実装するアルゴリズムの例

以下は、猿の選択王問題をphpで実装するアルゴリズムの例です。

この記事では、PHP での猿王問題アルゴリズムの実装について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

1. 質問:

n匹のサルが円を描き、時計回りに1からnまでの番号が付けられています。

次に、1 番の猿から時計回りに 1 から数え始めます。m に報告された猿が出てきて、先ほど出てきた猿の隣の位置から再び数え始めます。

これを、一匹だけ残った猿が王様になるまで繰り返します。

次の機能を実現するプログラムを設計および作成します:

(1) ユーザーはサルの開始数 $n と報告された最後の数 $m を入力する必要があります。

(2)選出された猿王の初期番号を言います。

2. 解決策:

?

補足的に改良されたアルゴリズム (このアルゴリズムはより簡潔で明確です!):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

/**

* @param int $n 先頭のサルの数

* @param int $m 最後に報告された番号

*(この数を報告したサルは除外され、次のサルが再び①から数え始めます)

* @return int 猿の初期番号

*/

関数 MonkeySelectKing($n,$m)

{

//最初のサルの数は 2 つ未満にすることはできません

if ($n {

false を返す;

}

$arr=範囲(1,$n);

//サルを配列にグループ化します。配列の値はサルの初期番号に対応します

$unsetNum=0;

//サルの数を記録する変数を定義します

for ($i = 2; $i //総サイクル数の計算方法がわかりません

{

//でもループ内にreturnが設定されているので$m*$lenの効率は大丈夫です

foreach ($arr as $k => $v)

{

$unsetNum++; //猿が到着するたびに、猿のカウントは+1されます

//報告されたサルの数が排除された数と等しい場合: サルを排除する(配列要素を削除)

//カウントを 0 に戻します (次のサルは 1 からカウントを開始します)

if ($unsetNum==$m)

{

// echo "
";//コメントを開くと、具体的な削除プロセスを確認できます

// print_r($arr);

unset($arr[$k]);

//猿を排除する

$unsetNum=0;

//ゼロに戻る

if (count($arr)==1)

//配列の長さを判断し、猿が1匹だけ残っている場合は、その値を返します

{

リセットを返す($arr);

}

}

}

}

}

var_dump(monkeySelectKing(6, 3));

1

2

3

4

5

6

7

8

9

関数ユエセフ($n,$m) {

$r=0;

for($i=2; $i

$r=($r+$m)%$i;

}

$r+1 を返す;

}

print_r(yuesefu(3,3));

この記事が皆様の PHP プログラムのアルゴリズム設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/987105.html技術記事 PHP で猿が王を選ぶ問題を実装するアルゴリズムの例 以下に、猿が王を選ぶ問題を PHP で実装するアルゴリズムの例を紹介します。 この記事の例では、PHP で猿を選ぶ王の問題アルゴリズムを実装する方法を説明します。みんなとシェアしましょう...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。