从n个数中取m个数的所有组合.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从n个数中取m个数的所有组合

本算法用于实现从一个含有n个数字的数组中,任意取其中m个元素的所有组合的实现情况,推导理由:以1,2,3,4,5数组为例,很明显,当只取一个元素时有5种,即单独的一个元素;取2个时候,就是C(5,2)=10种,即任意取2个数,以此类推。 下面给出算法实现:1,单独存入一个元素,并存到所有组合中去; 2,每加入一个新元素,则该新元素为一个单独的组合,同时,该新元素与(前面的)所有组合都可以组成一个新组合。即一步一步地每个加1。例如当前面的所有组合只有(1)时,存入一个2,则2单独存一下;然后2与1组成一个新组合,所有插入2以后,新的所有组合就是:(1),(2),(1,2);接下来插入新元素3,则元素3也可以单独成为一个组合存入,同时元素3还可以与前面的任意一个组成一个新组合,则插入3以后,新的所有组合为:(1),(2),(3),(1,3),(2,3)(1,2,3),以此类推。 3.最后统计(排序)所有组合的个数,以及每一种组合中元素的个数。对应输出元素个数为m的组合即可。 下面给出示例程序: /*vectorvectorint*/ void My_zuhe(int n,int r) { multimapint,vectorint mm,mm2; vectorint nn,temp,bb; vectorvectorint target; multimapint,vectorint::iterator pos; vectorint::iterator ita,ita_bb; typedef pairint,vectorint pr; for(int i=1;i=n;i++) bb.push_back(i); if(rn) return; int m=1,k; ita_bb=bb.begin(); temp.push_back(*ita_bb); mm.insert(pr(temp.size(),temp)); temp.clear(); ++ita_bb; while(ita_bb != bb.end()) { k=*ita_bb; for(pos=mm.begin();pos!=mm.end();++pos) { temp=pos-second; temp.push_back(k); mm2.insert(pr(temp.size(),temp)); temp.clear(); } for(pos=mm2.begin();pos!=mm2.end();++pos) mm.insert(*pos); mm2.clear(); temp.push_back(k); mm.insert(pr(temp.size(),temp)); temp.clear(); ++ita_bb; } for(pos=mm.begin();pos != mm.end();++pos) { if(pos-first == r) { target.push_back(pos-second); } } sort(target.begin(),target.end()); vectorvectorint::iterator tt_pos; coutIn all we have target.size() kinds, and they are:endl; for(tt_pos=target.begin(),k=0;tt_pos != target.end();++tt_pos,k++) { if(k%5==0 k0) coutendl; cout(; for(ita=tt_pos-begin();ita != tt_pos-end();++ita) cout*ita, ; cout) ; } //return target; } 主函数调用为: #include stdafx.h #include example23_apply_offer.h void main() { My_zuhe(10,2); coutendl; } 实验结果展示: C(10,2) C(5,3) C(5,4) 例题2: 题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2, 3^0+3^1+3^2,…) 请你求

文档评论(0)

cj80011 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档