PHP のアルゴリズムは非常に強力であると言えます。PHP などのプログラミング言語を学びたいなら、優れた論理的思考が必要だと言う人もいます。それなら、すべてのプログラマーは次の質問を見てください。
5人がリンゴをたくさん盗み、翌日その戦利品を山分けする計画を立てました。夕方、男が出てきて、すべての野菜と果物を5つの部分に分けましたが、余分なものがあったので、それを木の上の猿に投げて、最初に1/5を隠しました。意外なことに、他の4人も同じように考えていて、最初の人と同じように5つに分け、余った部分を猿に投げて1/5を奪いました。次の日、みんなで戦利品を分け、さらに5等分して、もう1つを猿に投げました。最後の人が分け前をもらいました。質問: リンゴは何個ありますか?
for ($i = 1; ; $i++) { if ($i%5 == 1) { //第一个人取五分之一,还剩$t $t = $i - round($i/5) - 1; if($t % 5 == 1) { //第二个人取五分之一,还剩$r $r = $t - round($t/5) - 1; if($r % 5 == 1) { //第三个人取五分之一,还剩$s $s = $r - round($r/5) - 1; if($s % 5 == 1) { //第四个人取五分之一,还剩$x $x = $s - round($s/5) - 1; if($x % 5 == 1) { //第五个人取五分之一,还剩$y $y = $x - round($x/5) - 1; if ($y % 5 == 1) { echo $i; break; } } } } } } }
猿の群れが円形に並び、1、2、…、n と番号が付けられます。次に、1 番目から数え始め、m 番目まで数え、円の外に追い出し、後ろから数え始め、m 番目まで数え、追い出します...このようにして最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。
function king($n, $m){ $monkeys = range(1, $n); $i=0; $k=$n; while (count($monkeys)>1) { if(($i+1)%$m==0) { unset($monkeys[$i]); } else { array_push($monkeys,$monkeys[$i]); unset($monkeys[$i]); } $i++; } return current($monkeys); } $a = king(5, 2); var_dump($a);
ハノイの塔 (ハノイの塔としても知られています) は、インドの古代の伝説です。世界を創造した神ブラフマーは神殿に 3 本のダイヤモンドの棒を残しました。最初の棒は 64 個の丸い金片で覆われ、他のものは他の棒よりも小さく積み重ねられていました。寺院では、僧侶たちが精力的に棒から棒へと一つずつ移動させていましたが、真ん中の棒は補助として使用できると規定されていましたが、一度に移動できるのは 1 本だけで、大きな棒は移動できませんでした。小さいものの上に置きます。答えを見つけるには、最後にあるプログラムを参照してください。 18446744073709551615という膨大な数(円盤を動かした回数)を前に、修道士たちが一生を費やしても金円盤の移動を完了することは不可能と思われる。
その後、この伝説はハノイの塔ゲームに発展しました:
1. 3 つのポール A、B、C があります。ポールAには複数の皿があります
2.一度に1つの皿を移動し、小さい皿は大きな皿の上にのみ積み重ねることができます
3.ポールAからポールCにすべての皿を移動します
ハノイの塔は非常に簡単に割れることがわかりました。移動ルールに従って金のピースを一方向に動かすだけです:
たとえば、3 次のハノイの塔の動き: A→C、A→B、C。 →B、A→C、B→A、B→C、A→C
さらに、ハノイの塔問題もプログラミングにおける古典的な再帰問題です。
function hanoi($n,$x,$y,$z){ if($n==1){ echo 'move disk 1 from '.$x.' to '.$z."\n"; }else{ hanoi($n-1,$x,$z,$y); echo 'move disk '.$n.' from '.$x.' to '.$z."\n"; hanoi($n-1,$y,$x,$z); } } hanoi(3,'A','B','C');
PHP を使用してバブル ソートおよびクイック ソートのアルゴリズムを記述します。オブジェクトは配列にすることができます。
//对数组冒泡排序 function bubble_sort($array){ $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j–){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; }
function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }
PHP を使用して、逐次検索およびバイナリ検索アルゴリズムを記述します。逐次検索では、オブジェクトは順序付けされた配列にすることができます
//使用二分查找数组中某个元素 function bin_sch($array, $low, $high, $k){ if ($low <= $high){ $mid = intval(($low+$high)/2); if ($array[$mid] == $k){ return $mid; }elseif ($k < $array[$mid]){ return bin_sch($array, $low, $mid-1, $k); }else{ return bin_sch($array, $mid+1, $high, $k); } } return -1; }
PHP の組み込み関数を呼び出すことができる 2 次元配列の並べ替えアルゴリズム関数を作成します。普遍性があります
rreee作ったことがありますか?まだ行っていない場合は、PHP アルゴリズムを使用し、上記の方法に従ってこの質問を完了してください。
以上がPHP の古典的なアルゴリズムの質問の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。