簡體   English   中英

javascript中給定數字數組中的組合數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM