zoukankan      html  css  js  c++  java
  • 算法——递归思想解决排列组合问题

    直接上代码

    void AString_m(char *str,char*pBegin)
    {//扩展以后对数组也适用。

    也能够写成这样的形式AString(char *str,int i,int n); if(!str || !pBegin) return; if(*pBegin=='') cout<<str<<endl; else { for(char *temp=pBegin;*temp!='';temp++) { char t=*pBegin;*pBegin=*temp;*temp=t; AString_m(str,pBegin+1); t=*pBegin;*pBegin=*temp;*temp=t; } } } void AString( char*str)//提供的公共接口函数 {AString_m(str,str); } void CString_m(char * pStr,int m,vector<char> & result) {//从一个字符串中选取m个字符 if(pStr==NULL)//字符串为空情形 return ; if(*pStr=='' && m!=0)//字符串中不够m个字符啦 return ; if(m==0) { for(int i=0;i<result.size();i++) cout<<result[i]; cout<<endl; return; } result.push_back(*pStr); CString_m(pStr+1,m-1,result); result.pop_back(); CString_m(pStr+1,m,result); } void CString(char *pStr) {//求一个字符串中字符的全排列 if(pStr==NULL || *pStr=='') return; int len=strlen(pStr); vector<char> re; for(int i=1;i<=len;i++) { re.clear(); CString_m(pStr,i,re); } } //排列组合相似实际问题:运动员打靶十次。问共打中90环有多少种可能 void ShootProblem_m(int number,int sum,vector<int> & result,int *total) {//打靶number次,共打中sum环 if(number<=0 || number*10<sum ) return ; if(number==1) { if(sum<=10 && sum>=0) { for(int i=0;i<result.size();i++) cout<<result[i]<<" "; cout<<sum<<endl; (*total)++; return; } else return; } for(int i=0;i<=10;i++) { result.push_back(i); ShootProblem_m(number-1,sum-i,result,total); result.pop_back(); } } void ShootProblem(int number,int sum) {//提供的公共接口函数 vector<int >re; int a=0; ShootProblem_m(number,sum,re,&a); cout<<"总共可能性有"<<a<<"种"<<endl; }

  • 相关阅读:
    构造无限级树并深度遍历查找指定节点
    如何用python自动编写《赤壁赋》文档
    《易经》总结
    IDEA看代码必备插件Call Graph 介绍及使用方法
    chemfig化学式转换为pdf
    从wav到Ogg Opus 以及使用java解码OPUS
    使用jhipster 加速java web开发
    从Spring框架看设计模式如何灵活使用
    提升NginxTLS/SSL HTTPS 性能的7条优化建议
    高效团队的gitlab flow最佳实践
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7217292.html
Copyright © 2011-2022 走看看