ホームページ  >  記事  >  バックエンド開発  >  PHP配列内部ポインタ演算関数を使用したジョセフリング問題のPHP実装_PHPチュートリアル

PHP配列内部ポインタ演算関数を使用したジョセフリング問題のPHP実装_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:33:441202ブラウズ

この問題の詳細な説明を見てみましょう:
ソースプリントを表示? 猿のグループが円形に並んでおり、1、2、...、n に従って番号が付けられています。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、その後ろから数え始め、m 番目まで数え、追い出します...このようにして、唯一になるまで続けます。残った猿は一匹で、その猿は王様と呼ばれます。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。
最初にこのアイデアを思いついたとき、PHP 配列を使用して実装したいと考えていました (もちろん、最終的には配列を使用しました)。その後、配列の内部ポインタをシミュレートするのはそれほど簡単ではないことがわかりました。多くの「ポインタ」が関係しているため、「配列ポインタ」をシミュレートします。この操作の後、PHP の配列自体が内部ポインタを持っているのに、なぜ「ホイールを発明する」必要があるのか​​と思いつきました。 !コードを見てください:

コードをコピーします コードは次のとおりです:

function getKingMonkey($n, $m)
{
$a = array();//内部配列を宣言します
for($i = 1; $i {
$a[$i] = $i;//このステップは正しいです
}
reset($a);/ /厳密にするために、reset() 関数は実際には省略できます
while(count($a) > 1)//ここで使用される基準は、次の数に達したときにループを停止することです。配列要素は 1 に等しい
{
for ($counter = 1; $counter <= $m; $counter++)//ネストされた for ループ。m までカウントするサルを「追い出す」ために使用されます
{
if( next($a)){// 次の要素がある場合
if($counter == $m)
{
unset($a[array_search(prev($a), $a)]);//カウントが m に達したら、unset() を使用して配列要素を削除します
}
}
else//次の要素がない場合
{
reset($a);// 配列の最初の要素が次の要素として機能します
if($counter == $m)
{
unset( $a[array_search(end($a), $a)]);//カウントが m に達したら、unset() を使用して配列要素を削除します。これは end()
reset($a);// 配列の内部ポインタが "returns" であることに注意してください
}
}
}
}
return current($a)
}

Testそれ:
echo "猿王の番号は:" . getKingMonkey(100, 17);
出力は:
ソースプリントを表示?猿王の番号は: 53
THSEND~

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322540.html技術記事この問題の詳細な説明を見てみましょう: ソースプリントを表示? 猿のグループが円形に並び、1、2、...、n に従って番号が付けられています。それから、最初のものから数え始めて、m 番目のものまで数えて、それをサークルから追い出し、そこから始めます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。