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
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);
更新:
后来的答案全是
C(6,2),这是不正确的。 在这里要求是两两组合而非6取2,答案应该是C(6,2)*C(4,2)*C(2,2)/A(3,3),虽然结果和C(6,2)结果一样都是15后来的回答只有小明的是正确的
方便理解就是n-1 + n-2 + ...+ 2+1
组合就是cn2 最后就过就是(n-1)*n/2
高中知识吧
经典算法:穷举+去重。
允许输入的数字有重复,如(4,4,5,6,7,8,9,9)
用代码有点大材小用吧,真要用的话深度优先搜索?
...这不是数学吗... c(6,2)
精简版
首先对给出的数组 去重(因为问的是组合方式)
然后根据排列组合的公式 cn2 计算出结果
最后 加上 有重复数字的个数(因为 1 2 2 会存在 1 2 和 2 2 两种组合方式,一定要记得统计上)