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,依此类推。
感谢您的帮助!
答案 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;
}