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 为 var n 和 (5*4*3*2 *1) 使用 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;
}
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等等。
感谢您的帮助!
已更新,(带循环):
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;
}