javascript - 两两组合有多少种组合方式,求代码
高洛峰
高洛峰 2017-04-11 10:26:22
[JavaScript讨论组]
4,6,7,8,9,10几个数字两两组合,有多少种组合方式,颠倒位置不算,求代码
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(8)
黄舟

更新:
后来的答案全是C(6,2),这是不正确的。 在这里要求是两两组合而非62,答案应该是C(6,2)*C(4,2)*C(2,2)/A(3,3),虽然结果和C(6,2)结果一样都是15
后来的回答只有小明的是正确的

n个数,取出两个数
c(n)=n!/2(n-2)!
阶乘函数
const f = n =>n==1?1:n*g(n-1)
所以,组合数:
const c = n =>f(n)/f(n-2)/2
在这个问题里,
const g = n =>c(6)*c(4)*c(2)/f(3)
g()//15
高洛峰

方便理解就是n-1 + n-2 + ...+ 2+1
组合就是cn2 最后就过就是(n-1)*n/2
高中知识吧

伊谢尔伦

经典算法:穷举+去重。
允许输入的数字有重复,如(4,4,5,6,7,8,9,9)

var input = [4,6,7,8,9,10];

function foo(arr) {
    var i, j, comb,
        len=arr.length,
        list = [];

    for (i=0; i<len; i++){
        for (j=0; j<len; j++){
            if (j !== i) {
                comb = [arr[i], arr[j]].sort(function(a,b){return a-b}).join(",");
                if (list.indexOf(comb) < 0) {
                    list.push(comb);
                }
            }
        }
    }
    return list.length;
}

foo(input);
ringa_lee

用代码有点大材小用吧,真要用的话深度优先搜索?

怪我咯

...这不是数学吗... c(6,2)

怪我咯

精简版

    count = 0
    nums = [4,6,7,8,9,10]
    nums2 = list(nums)
    for x in nums:
        del nums2[0]
        for y in nums2:
            print("(%d,%d)"%(x,y))
            count+=1 
    print(count) //C(6,2)=15
阿神

首先对给出的数组 去重(因为问的是组合方式)
然后根据排列组合的公式 cn2 计算出结果
最后 加上 有重复数字的个数(因为 1 2 2 会存在 1 2 和 2 2 两种组合方式,一定要记得统计上)

天蓬老师
    var data = [4,6,7,8,9,10];
    var result = [];
    
    function fun(arr,startIndex){
        for(var i = startIndex ; i < arr.length && (i + 1) < arr.length; i ++){
            result.push([arr[startIndex],arr[i+1]]);
        }
        if(startIndex < arr.length)
            fun(arr,startIndex + 1);
        
    }
    fun(data,0);
    
    console.log(result,result.length);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号