Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 640|回复: 0

[默认分类] 算法——递归思想解决排列组合问题

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-30 10:00:03 | 显示全部楼层 |阅读模式

    直接上代码
    1. [code]void AString_m(char *str,char*pBegin)
    2. {//扩展以后对数组也适用。也可以写成这种形式AString(char *str,int i,int n);
    3.       if(!str || !pBegin) return;
    4.       if(*pBegin=="\0")     cout<<str<<endl;
    5.       else
    6.       {  for(char *temp=pBegin;*temp!="\0";temp++)
    7.             {  char t=*pBegin;*pBegin=*temp;*temp=t;
    8.                   AString_m(str,pBegin+1);
    9.                   t=*pBegin;*pBegin=*temp;*temp=t;
    10.             }
    11.       }
    12. }
    13. void AString( char*str)//提供的公共接口函数
    14. {AString_m(str,str); }
    15. void CString_m(char * pStr,int m,vector<char> & result)
    16. {//从一个字符串中选取m个字符
    17.       if(pStr==NULL)//字符串为空情形
    18.             return ;
    19.       if(*pStr=="\0" && m!=0)//字符串中不够m个字符啦
    20.             return ;
    21.       if(m==0)
    22.       { for(int  i=0;i<result.size();i++)
    23.                   cout<<result[i];
    24.             cout<<endl;
    25.             return;
    26.       }
    27.       result.push_back(*pStr);
    28.       CString_m(pStr+1,m-1,result);
    29.       result.pop_back();
    30.       CString_m(pStr+1,m,result);
    31. }
    32. void CString(char *pStr)
    33. {//求一个字符串中字符的全排列
    34.       if(pStr==NULL || *pStr=="\0") return;
    35.       int len=strlen(pStr);    vector<char> re;
    36.       for(int i=1;i<=len;i++)
    37.       { re.clear();
    38.             CString_m(pStr,i,re);
    39.       }
    40. }
    41. //排列组合类似实际问题:运动员打靶十次,问共打中90环有多少种可能
    42. void ShootProblem_m(int number,int sum,vector<int> & result,int *total)
    43. {//打靶number次,共打中sum环
    44.       if(number<=0 || number*10<sum )  return ;
    45.       if(number==1)
    46.       { if(sum<=10 && sum>=0)
    47.             {  for(int i=0;i<result.size();i++)
    48.                         cout<<result[i]<<" ";
    49.                   cout<<sum<<endl;
    50.                   (*total)++;
    51.                   return;
    52.             }   
    53.            else  
    54.                  return;
    55.       }
    56.       for(int i=0;i<=10;i++)
    57.       {
    58.             result.push_back(i);
    59.             ShootProblem_m(number-1,sum-i,result,total);
    60.             result.pop_back();
    61.       }
    62. }
    63. void ShootProblem(int number,int sum)
    64. {//提供的公共接口函数
    65.       vector<int >re;
    66.       int a=0;
    67.       ShootProblem_m(number,sum,re,&a);
    68.       cout<<"总共可能性有"<<a<<"种"<<endl;
    69. }
    复制代码
    [/code]

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-1 12:24 , Processed in 0.389574 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表