从找出n个元素中第k小的元素取m个元素,有多少种不同的取法


提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部n!/m!=n(n-1)(n-2)……1/m(m-1)(m-2)1即n乘到1除以m乘到1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
}
从n中选m个数,以下两种方法:(1)递归a.首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。b.从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。下面是递归方法的实现:///求从数组a[1..n]中任选m个元素的所有组合。///a[1..n]表示候选集,n为候选集大小,n>=m>0。///b[1..M]用来存储当前组合中的元素(这里存储的是元素下标),///常量M表示满足条件的一个组合中元素的个数,M=m,这两个参数仅用来输出结果。voidcombine(inta[],intn,intm,intb[],constintM){for(inti=n;i>=m;i--)//注意这里的循环范围{b[m-1]=i-1;if(m>1)combine(a,i-1,m-1,b,M);else//m==1,输出一个组合{for(intj=M-1;j>=0;j--)cout<<a[b[j]]<<"";cout<<endl;}}}(2)01转换法本程序的思路是开一个数组,其下标表示1到n个数,数组元素的值为1表示其代表的数被选中,为0则没选中。首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。当第一个“1”移动到数组的n-m的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。例如求5中选3的组合:11100//1,2,311010//1,2,410110//1,3,401110//2,3,411001//1,2,510101//1,3,501101//2,3,510011//1,4,501011//2,4,500111//3,4,5}

我要回帖

更多关于 找出n个元素中第k小的元素 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信