Heim  >  Artikel  >  Web-Frontend  >  Lustige JavaScript-Fragen: Kleinster gemeinsamer Nenner

Lustige JavaScript-Fragen: Kleinster gemeinsamer Nenner

黄舟
黄舟Original
2017-02-04 15:31:531507Durchsuche

Sie haben eine Liste, in der jedes Zahlenpaar den Zähler und Nenner eines Bruchs darstellt:

[ [numer_1, denom_1] , ... [numer_n, denom_n] ]

Alle Zahlen sind positive ganze Zahlen.

Sie müssen den kleinsten gemeinsamen Nenner D finden, den ursprünglichen Nenner durch D ersetzen und den Zähler so ändern, dass die von ihnen dargestellten Werte unverändert bleiben.

Zum Beispiel:

[ [1, 2], [1, 3], [1, 4] ] // => (6,12)(4,12)(3,12)

Hier ist der kleinste gemeinsame Nenner von 2, 3 und 4 12, also wird der Nenner in 12 geändert und der Zähler wird entsprechend geändert, um beizubehalten den gleichen Wert.

1/2 und 6/12 sind gleich groß, und 1/3 und 4/12 sind auch gleich groß.

Der Schlüssel zu dieser Frage besteht darin, den kleinsten gemeinsamen Nenner oder das kleinste gemeinsame Vielfache aller Nenner zu finden.

Wir benötigen also zunächst eine SCM-Methode, um das kleinste gemeinsame Vielfache zu finden, die ein Array als Parameter erhält.

Die Akkumulation beginnt beim größten Element des Arrays, um zu sehen, ob jedes Array-Element teilbar ist. Wenn ja, ist es das kleinste gemeinsame Vielfache

//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;  
    }  
}

Natürlich ist diese Methode nicht effizient. Eine gute Möglichkeit, das kleinste gemeinsame Vielfache zu finden, ist die Verwendung des größten gemeinsamen Teilers.


Dann ist es einfach, das zweite Element aller Arrays in der Liste herauszunehmen, das das Nennerelement ist, ein neues Array zu bilden und es an den SCM zu übergeben Methode, um den kleinsten gemeinsamen Nenner zu erhalten.

Abschließend durchlaufen Sie die Liste und verketten die Zeichenfolgen.

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;  
}

Das Obige ist der Inhalt von JavaScript-interessanten Fragen: Der kleinste gemeinsame Nenner Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn