> 일일 프로그램 > PHP 지식 > PHP 무작위 선택 알고리즘 (3)

PHP 무작위 선택 알고리즘 (3)

藏色散人
풀어 주다: 2021-01-11 10:48:14
원래의
9219명이 탐색했습니다.

이전 글 "PHP Random Picking One 알고리즘(2)"에서 "공정한 원숭이 왕 선발" 면접 질문에 대한 해결 방안인 PHP Random Picking One 알고리즘의 구현 아이디어를 자세히 소개한 적이 있었습니다. .

PHP 무작위 선택 알고리즘 (3)

이제 위 글의 코드 메소드를 결합하여 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);
로그인 후 복사

먼저 코드의 네 번째 줄 앞에 중단점을 만듭니다.

PHP 무작위 선택 알고리즘 (3)

그런 다음 브라우저를 열고 다음 코드를 실행하면 아래와 같이 중단점이 성공적으로 포커스를 얻습니다.

PHP 무작위 선택 알고리즘 (3)

1부터 n까지의 배열을 만듭니다.

PHP 무작위 선택 알고리즘 (3)

그런 다음 while 루프는 요소를 삭제할지 여부를 결정합니다.

PHP 무작위 선택 알고리즘 (3)

이 사이클을 반복하면 마침내 "원숭이 왕"을 얻을 수 있습니다.

관련 권장 사항: "PHSPtorm에서 xdebug 도구를 구성하고 사용하는 방법은 무엇입니까? (사진 + 동영상 튜토리얼)

이제 PHP의 랜덤원 알고리즘에 대한 소개입니다. 로컬에서 테스트할 수도 있습니다. 실제로는 매우 간단합니다. 필요한 친구들에게 도움이 되길 바랍니다!

위 내용은 PHP 무작위 선택 알고리즘 (3)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿