[英]Number of combinations in a given number array in javascript
var ans = (49*48*47*46*45*44)/(6*5*4*3*2*1)
alert(ans.toLocaleString())
這將輸出13,983,816 ,這是從 1 到 49 的數字數組的正確可能組合數。
我如何使用可以從 2 個變量中獲得的數字來實現這一點?
例如,如果我想計算 40 個數字中 5 個可能的組合數,我需要 (40*39*38*37*36)/(5*4*3*2*1) 並且我需要這個被替換為: 40*39*38*37*36 with var n和 (5*4*3*2*1) with var t但輸出正確的數字順序。
明確地說,我不想在變量中手動編寫這些操作,我希望變量中指定的數字根據它們的值生成操作。 如果我指定 6 個選擇我需要生成 6*5*4*3*2*1,如果我指定 5 個選擇它需要生成 5*4*3*2*1 等等。
謝謝您的幫助!
更新,(帶循環):
Number.prototype.to = function(to){ var result = 1; while(this >= to) result *= to++; return result }; var n = 49..to(44); //49*48*47*46*45*44 var t = 6..to(1); //6*5*4*3*2*1 document.writeln((n/t).toLocaleString())
沒關系,我在幾個小時后設法弄清楚了:
function getChance(numbers, out_of) {
return numbers>0?out_of/numbers*getChance(numbers-1,out_of-1):1;
}
var np = 6; //numbers picked
var tn = 49; //total numbers
var ntm = 6; //numbers to match
var picks = getChance(np-ntm, tn-ntm);
var combs = getChance(np, tn);
var probs = combs/picks;
document.getElementById('chance').innerHTML = (probs | 0).toLocaleString();
你可以試試for
循環:
function binom(a,b) {
if(a < 2*b) b = a-b;
var n = 1;
for(var i=a-b+1; i<=a; ++i) n *= i;
for(var i=2; i<=b; ++i) n /= i;
return n;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.