javascript中给定数字数组中的组合数

时间:2015-06-20 11:42:33

标签: javascript combinations probability

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 var n 和(5 * 4 * 3 * 2 * 1) var t 但输出正确的数字顺序。

为了清楚起见,我不想在变量中手动编写这些操作,我希望变量中指定的数字根据它们的值生成操作。如果我指定6个选项,我需要生成6 * 5 * 4 * 3 * 2 * 1,如果我指定5个选项则需要生成5 * 4 * 3 * 2 * 1,依此类推。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

更新,(带循环):



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())




答案 1 :(得分:0)

没关系,我设法在好几个小时之后搞清楚了:

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();

答案 2 :(得分:0)

您可以尝试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;
}