> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 재미있는 질문: 최소 공통 분모

JavaScript 재미있는 질문: 최소 공통 분모

黄舟
풀어 주다: 2017-02-04 15:31:53
원래의
1574명이 탐색했습니다.

각 숫자 쌍이 분수의 분자와 분모를 나타내는 목록이 있습니다.

[ [numer_1, denom_1] , ... [numer_n, denom_n] ]
로그인 후 복사

모든 숫자는 양의 정수입니다.

최소 공통분모 D를 찾아 원래 분모를 D로 바꾸고, 그들이 나타내는 값이 변하지 않도록 분자를 바꿔야 합니다.

예:

[ [1, 2], [1, 3], [1, 4] ] // => (6,12)(4,12)(3,12)
로그인 후 복사

여기서 2,3,4의 최소공분모는 12이므로 분모는 12로 변경되고, 그에 따라 분자도 변경되어 동일한 값을 유지합니다. .

1/2과 6/12도 같은 크기이고, 1/3과 4/12도 같은 크기입니다.

이 질문의 핵심은 최소공분모, 즉 모든 분모의 최소공배수를 찾는 것입니다.

따라서 최소 공배수를 찾기 위해서는 먼저 배열을 매개변수로 받는 scm 메소드가 필요합니다.

각 배열 요소가 나누어 떨어지는지 확인하기 위해 배열의 가장 큰 요소부터 누적을 시작합니다. 그렇다면 최소 공배수입니다.

//smallest common multiple  
function scm(array){  
    var max = Math.max.apply(null,array);  
    signal:  
    while(true){  
        for(var i=0;i<array.length;i++){  
            if(max % array[i]){  
                max++;  
                continue signal;  
            }  
        }  
        return max;  
    }  
}
로그인 후 복사

물론 이 방법은 효율적이지 않습니다. 최소 공배수 방법은 최대 공약수를 사용하여 찾는 것이 가장 좋습니다.


그러면 목록의 모든 배열 중 분모 항목인 두 번째 항목을 꺼내서 새 배열을 구성하고 scm에 전달하면 됩니다. 최소 공통분모를 구하는 방법.

마지막으로 목록을 반복하고 문자열을 연결합니다.

function convertFrac(lst){  
    var array = [];  
    var str = "";  
    for(var i=0;i<lst.length;i++){  
        array.push(lst[i][1]);  
    }  
    var result = scm(array);  
    for(var i=0;i<lst.length;i++){  
        str += "(" + result / lst[i][1] * lst[i][0] + "," + result + ")";  
    }  
    return str;  
}
로그인 후 복사

위 내용은 JavaScript 재미있는 질문: 최소공통분모에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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