排列组合问题
来源:互联网 发布:unity3d 像素拉伸 编辑:程序博客网 时间:2024/05/28 11:51
1. 基本排列A(n, m)的实现
1)应用穷举是比较容易实现的
2)这里用回溯法解决此题(回溯法简介http://baike.baidu.com/view/45.htm)
算法思路:
①设置一维a数组,a在1~n中取值,出现数字相同时返回
②当i<m时,还未取m个数,i增加1后a(i)=1继续;当i=m时,输出一个A(n, m)的排列,并设置变量s统计A(n, m)排列的个数(这个其实可以用数学公式直接计算
③当a(i)<n时a(i)增1继续;当a(i)=n时回溯或调整,直到i=0时结束。
3)代码
4)程序变通
①若将a[j]==a修改为a[j]>=a就能实现从n个不同元素中取m个的组合
②把以上程序中的输出语句“printf("%d", a[j])“改为“printf("%c", a[j]+64)”,排列(或组合)输出由前n个整数改变为前n个大写英文字母输出。
③将该语句改成printf("%c", n+65-a[j]),排列(或组合)输出由前n个正整数改变为前n个大写英文字母逆序输出。
2.特殊情况
问题描述:从n个不同元素中取m个元素与另n-m个相同元素的排列,如:如何从4个不同数字1、2、3、4中取2个数字与另2个“0”的排列?
一般地,探讨实现从n个不同元素中取m(约定1<m<=n)个元素与另外n-m个相同元素组成的排列。
设n个不同元素为数字1~n,n-m个相同元素为n-m个元素0.
设置一维数组,应用回溯法产生由数字0~n这n+1个元素取n个数字组成的n元组,若非0元素(即数字1~n)有重复时舍去;引入了一个变量k来控制0的个数,使它不超过n-m。余下的即从数字1~n中取m个不同数字与n-m个0的排列,进行打印出来
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 排列组合问题
- 一个排列组合的问题
- 第一题:排列组合问题
- 字符串的排列组合问题
- 跟我一起写 Makefile (三)——书写规则
- Android线程优先级设置方法
- Cairngorm框架简介
- Ubuntu 11.04安装后建议做的20件事
- QTP
- 排列组合问题
- 跟我一起写 Makefile (四)——书写命令
- wap push sms
- Windows Azure AppFabric Caching服务发布!
- C语言运算符优先级顺口溜
- 如何将EntityFramework实体类转换为JSON字符串
- 请教一下,数据库连接总是报中断然后又恢复,系统的监控软件总是告警,这种瞬间中断连接又瞬间恢复一般都是什么原因引起的?
- apache work&prefork
- USB 配置,接口,设置,endpoint描述符的关系