이전 글 "PHP Random Picking One 알고리즘(2)"에서 "공정한 원숭이 왕 선발" 면접 질문에 대한 해결 방안인 PHP Random Picking One 알고리즘의 구현 아이디어를 자세히 소개한 적이 있었습니다. .
이제 위 글의 코드 메소드를 결합하여 Xdebug를 통해 알고리즘을 디버깅하고 실행하는 과정을 보여드리겠습니다.
문제는 다음과 같습니다.
한 무리의 원숭이가 원을 그리며 줄을 서고 1, 2,...,n에 따라 번호가 매겨져 있습니다. 그런 다음 첫 번째부터 세기 시작하고, m 번째까지 세고, 원 밖으로 쫓아내고, 뒤에서 세기 시작하고, m 번째까지 세고, 쫓아내고... 끝까지 이런 식으로 계속합니다. 이제 원숭이는 한 마리밖에 남지 않았는데, 그 원숭이를 왕이라고 부릅니다. 이 과정을 시뮬레이션하여 m, n을 입력하고 마지막 왕의 수를 출력하는 프로그래밍이 필요합니다.
코드는 다음과 같습니다.
<?php function king($n, $m){ $monkeys = range(1, $n); //创建1到n数组 $i=0; while (count($monkeys)>1) { //循环条件为猴子数量大于1 if(($i+1)%$m==0) { //$i为数组下标;$i+1为猴子标号 unset($monkeys[$i]); //余数等于0表示正好第m个,删除,用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]); //如果余数不等于0,则把数组下标为$i的放最后,形成一个圆形结构 unset($monkeys[$i]); } $i++;//$i 循环+1,不断把猴子删除,或 push到数组 } return current($monkeys); //猴子数量等于1时输出猴子标号,得出猴王 } echo king(10,3);
먼저 코드의 네 번째 줄 앞에 중단점을 만듭니다.
그런 다음 브라우저를 열고 다음 코드를 실행하면 아래와 같이 중단점이 성공적으로 포커스를 얻습니다.
1부터 n까지의 배열을 만듭니다.
그런 다음 while 루프는 요소를 삭제할지 여부를 결정합니다.
이 사이클을 반복하면 마침내 "원숭이 왕"을 얻을 수 있습니다.
관련 권장 사항: "PHSPtorm에서 xdebug 도구를 구성하고 사용하는 방법은 무엇입니까? (사진 + 동영상 튜토리얼) 》
이제 PHP의 랜덤원 알고리즘에 대한 소개입니다. 로컬에서 테스트할 수도 있습니다. 실제로는 매우 간단합니다. 필요한 친구들에게 도움이 되길 바랍니다!
위 내용은 PHP 무작위 선택 알고리즘 (3)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!