生成排列的方法
来源:互联网 发布:谷歌优化排名 编辑:程序博客网 时间:2024/06/04 23:26
一、生成无重复元素的排列
#include <stdio.h>void pailie(int n,int *A,int cur,int *p)//利用递归进行调用{int i,j;if(cur==n){for(i=0;i<n;i++){printf("%d ",A[i]);}printf("\n");}elsefor(i=0;i<n;i++){int ok=1;//判断一个数在数组中是否重复出现的方法 for(j=0;j<=cur;j++){if(A[j]==p[i])//如果重复出现,令标记为0 ok=0;}if(ok)//如果没有重复出现,执行操作 {
A[cur]=p[i];//联想解答树,每一层的限制条件是p[i]在A[i]中没有出现重复。该层次已执行完毕,递归进行下一层次的选择
pailie(n,A,cur+1,p);}}}int main(){int p[3]={1,3,7} ;int A[4];pailie(3,A,0,p);return 0;}
二、生成有重复元素的排列
#include <stdio.h>void pailie(int n,int *A,int cur,int *p){int i,j;if(cur==n){for(i=0;i<n;i++){printf("%d ",A[i]);}printf("\n");}elsefor(i=0;i<n;i++){int ok=1;//判断一个数在数组中是否重复出现的方法 for(j=0;j<=cur;j++){if(A[j]==p[i])//如果重复出现,令标记为0 {ok=0;break;}}if(ok)//如果没有重复出现,执行的操作 {A[cur]=p[i];pailie(n,A,cur+1,p);}else//如果有重复出现的元素,执行的操作 {if(!i||p[i]!=p[i-1]){int c1=0,c2=0;for(j=0;j<cur;j++)//计算A中p[i]出现的次数{if(A[j]==p[i]) c1++;}for(j=0;j<n;j++)//计算p中p[i]重复出现的次数{if(p[j]==p[i]) c2++;}if(c1<c2){A[cur]=p[i];pailie(n,A,cur+1,p);}}}}}int main(){int p[3]={1,1,2} ;int A[4];pailie(3,A,0,p);return 0;}
0 0
- 生成排列的方法
- 全排列的生成方法
- 生成全排列的一些方法
- 生成全排列的两种方法
- 枚举生成排列的方法总结
- 生成全排列的省事方法
- 使用递归的方法生成一个序列的所有排列
- 生成1~n的排列的三种方法
- 数组中的数据随机排列的生成代码及方法
- 浅谈生成全排列的4种方法
- 两种生成全排列序列的方法
- 排列的生成
- 全排列的生成
- 全排列的生成
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- 生成可重集的排列
- PHP 的 session_encode() 和 session_decode() 函数
- 递归算法空间的缩减方法与尾递归
- android.process.acore不运行及其它问题解决
- 【js学习笔记-101】------借助<script>发送HTTP请求
- 建新网站要做的四个SEO优化
- 生成排列的方法
- 浏览器缓存机制
- Ubuntu12.04升级至13.04
- 自定义进度条
- java.lang.OutOfMemoryError: Java heap space异常解决方法。
- ubuntu的截图技巧
- 关于javamelody配置后,工程出错问题
- QTP常用的快捷键
- 如何上Gmail更快