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

javascript中给定数字数组中的组合数,javascript,combinations,probability,Javascript,Combinations,Probability,这将输出13983816,它是从1到49的数字数组中可能组合的正确数目 我如何用从两个变量中得到的数字来实现这一点 例如,如果我想计算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个选项,它需

这将输出13983816,它是从1到49的数字数组中可能组合的正确数目

我如何用从两个变量中得到的数字来实现这一点

例如,如果我想计算40个数字中的5个可能的组合数,我需要(40*39*38*37*36)/(5*4*3*2*1),我需要将其替换为:40*39*38*37*36var n和(5*4*3*2*1)带var t但输出正确的数字顺序

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

谢谢你的帮助

已更新(带循环):

Number.prototype.to=函数(to){
var结果=1;
而(这个>=to)结果*=to++;
返回结果
};
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())
不管怎样,我在几个小时后终于弄明白了:

var ans = (49*48*47*46*45*44)/(6*5*4*3*2*1)

alert(ans.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();
函数binom(a,b){
如果(a<2*b)b=a-b;
var n=1;

对于(var i=a-b+1;iHi,谢谢你的建议,但这不是我想要完成的。我希望从你指定的数字生成运算符。如果我想从可能的10个数字中得到2个,我不想直接在这些变量中写入运算,我希望这些变量生成运算。如果我想有2*1 i want指定2,对于另一个变量,如果我指定10,那么它将如下所示:10*9。@Lucian更新,请参见
to
函数,您想要这样吗?越来越近:D-但您仍在变量中写入操作。操作需要在这两个变量之外。我将为每个变量提供两个选择输入当用户选择6作为第一个输入,选择49作为第二个输入时,魔术需要发生。我不想手动键入输入值的操作。非常感谢到目前为止的帮助。顺便说一句!我只需要另外两个这样的变量:var n=(b)…to(b-a);var t=(a)…to(1)但是我不知道如何正确地写。你试过使用循环吗?!我没有,我正在研究:)
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;
}