简单枚举---从一数组中任取n个元素

这个问题很明显的需要用枚举的思想来一一遍历数组元素并进行无重复组合

给出一个数组a[14]={1,2,3,4,5,6,7,8,9,10,11,12,13,14},求从中任取n个元素的所有组合

如果任取1个元素+取所有元素:15种可能

如果任取2个元素:C^2 14=91  递归组合

1 2    1 3    1 4  1 5   1 6 1 7 1 8 1 9 1 10 1 11 1 12   1 13   1 14   14种

2 3   2 4  2 5  2  6   ... 13种

12 种 .. 1种

((1+14)X14 ) /  2 =99种

...

如果任取13个元素:C^13 14=

计算过程:C(14,1) = 14 + C(14,2) = 91+  C(14,3) = 364  + C(14,4) = 1001 +  C(14,5) = 2002 + C(14,6) = 3003 + C(14,7) = 3432...

(现在每次删除一个后执行命令,是任取13个的一种,12个的一种,11个的一种.., 1个的一种)

参考来源:

https://blog.csdn.net/johnsjee/article/details/17071945

原文地址:https://www.cnblogs.com/bio-mary/p/11757865.html

时间: 2024-08-01 18:12:23

简单枚举---从一数组中任取n个元素的相关文章

JS案例之8——从一个数组中随机取数

近期项目中遇到一个需求,从一个列表中随机展示列表的部分内容,需求不大,JS也非常容易实现.主要是运用到了Math对象的random方法,和Array的splice方法. 思路是先新建一个数组,存放所有的列表,然后算出随机数,从数组中取出这个随机索引对应的值,然后组成一个随机数组. 源代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Conten

从N个元素的集合中随机取m个元素的算法实现

最近有一个需求,比较简单,就是如标题所说的,从N个元素中随机取m个元素,当然这m个元素是不能存在重复的.本以为这么简单的需求,应该有现成的工具类来实现,但是几次查找居然没找到(有知道的可以推荐下哈^_^).只好自己实现了下. 自己的实现思路也不知道是不是有问题,或者还有没有更好的思路来实现,所以在这里贴出来,供有兴趣的猿友提提建议.找找问题,或者找到更好的实现思路. 废话不多说,直接上代码(java实现) /** * 随机取num个从0到maxVal的整数.包括零,不包括maxValue * @

在至少3个互异的整数中任取一个“常规元素”

问题: 从 n>=3 个互异整数中,除最大.最小者以外,任取一个“常规元素”. 解决: ordinaryElement(s[], n) 在 s 中任取三个元素,不失一般性就去前三个元素: //这3个元素亦必互异 通过比较,输出其中大小居中的元素: //这个元素必然就是“常规元素” 问题简单,写下来的目的是为了告诫自己: 永远重视思考的过程,永远不要把简单的问题想复杂,永远追求“大道至简”. From : <数据结构>,邓俊辉

数组中第K大的元素

数组中第K大的元素总结 解法1: 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k). 解法2: 如果k很小,比如第五个最大的数,而整个数组的长度非常的大,那么,还有一种方法就是,我做k遍找最大的数,每做一遍,就把最大的放在数组的最后面(遍历一次找出最大的数例如冒泡,选择排序都可以.),然后减少数组扫描的范围,就可以把第k大的数找出来,这样做的复杂度就是O(K*N),在K很小的情况下,还是不错的. 解法3: 利用快速排序的思想,从数组S中随机找

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读<数据结构.算法与应用>这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢 8. 从左至右检查数组a[0:n-1]中的元素,以查找雨x相等的那些元素.如果找到一个元素与x相等,则函数返回x第一次出现所在的位置.如果在数组中没有找到这样的元素,函数则返回-1. // // main.cpp // Test_08 // // Created

从一个数组中随机取出一定数量元素组成新数组

/** * 从一个数组中随机取出一定数量元素组成新数组 * @param array 一个String类型的数组 * @param number需要取出元素的数量 * @return 一个随机的数组 * @throws NullPointerException原数组不能为空 *@throws ArrayIndexOutOfBoundsException新数组长度应不大于原数组的长度 */ public static String[]  getRandomArray(String[] array,

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

1.算法思想 问题描述:从数组array中找出第i小的元素(要求array中没有重复元素的情况),这是个经典的"线性时间选择(Selection in expected linear time)"问题. 思路:算法导论215页9.2 Selection in expect linear time 2.java实现 思路:算法导论216页伪代码 /*期望为线性时间的选择算法,输入要求,array中没有重复的元素*/ public static int randomizedSelect(i

找出数组中出现次数超过一半的元素

题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include <stdio.h> int half_number(int a[], int n) { if( a == NULL || n <= 0 ) return -1; int i, candidate; int times = 0; for( i=0; i<n; i++ ) { if( times == 0 ) { candidate