1. n全排列输出:
  2.  
  3. int WPermutation(int num, bool bRepeat)
  4. num表示num全排列
  5.  
  6. bRepeat标志是否产生重复元素的序列。
  7.  
  8. int Permutation(int n, int* A, int cur, bool bRepeat)
  9. {
  10. static int number = 0;
  11. if(cur == n)
  12. {
  13. number++;
  14. for(int i = 0; i< n; i++)
  15. {
  16. printf("%d ", A[i]);
  17. }
  18. printf("\n");
  19. }
  20. else
  21. {
  22. for(int i = 1; i <= n; i++)
  23. {
  24. int ok = 1;
  25. for(int j = 0; j < cur; j++)
  26. {
  27. if(!bRepeat)
  28. {
  29. if(A[j] == i)
  30. {
  31. ok = 0;
  32. }
  33. }
  34. }
  35.  
  36. if(ok)
  37. {
  38. A[cur] = i;
  39. Permutation(n, A, cur + 1, bRepeat);
  40. }
  41.  
  42. }
  43. }
  44.  
  45. return number;
  46. }
  47. int WPermutation(int num, bool bRepeat)
  48. {
  49. printf("%d permutation(%s): %d ~ %d\n", num, bRepeat?"repeat mode":"single mode", 1, num);
  50. int n = num;
  51. int *A = (int*)malloc(n*sizeof(int));
  52. memset(A, 0, sizeof(n*sizeof(int)));
  53. int cur = 0;
  54. int number = Permutation(n, A, cur, bRepeat);
  55. delete [] A ;
  56. A = NULL;
  57. printf("over!\n");
  58. return number;
  59.  
  60. }
  61.  
  62. int Wpermutation(int st, int en, int n, bool bRepeat);
  63. n个数的组合(数字范围st~en),考虑重复元素:
  64.  
  65. n表示n个数字组合
  66.  
  67. 每个数字范围:st~en
  68.  
  69. bRepeat标志是否产生重复元素的序列。
  70.  
  71. int Permutation(int st, int en, int n, int* A, int cur, bool bRepeat)
  72. {
  73. static int number = 0;
  74.  
  75. if(cur == n)
  76. {
  77. number++;
  78. for(int i = 0; i< n; i++)
  79. {
  80. printf("%d ", A[i]);
  81. }
  82. printf("\n");
  83. }
  84. else
  85. {
  86. for(int i = st; i <= en; i++)
  87. {
  88. int ok = 1;
  89. for(int j = 0; j < cur; j++)
  90. {
  91. if(!bRepeat)
  92. {
  93. if(A[j] == i)
  94. {
  95. ok = 0;
  96. }
  97. }
  98. }
  99.  
  100. if(ok)
  101. {
  102. A[cur] = i;
  103. Permutation(st, en, n, A, cur + 1, bRepeat);
  104. }
  105.  
  106. }
  107. }
  108.  
  109. return number;
  110. }
  111.  
  112. int Wpermutation(int st, int en, int n, bool bRepeat)
  113. {
  114. printf("%d permutation(%s): %d ~ %d\n", n, bRepeat?"repeat mode":"single mode", st, en);
  115. int num = en - st + 1;
  116. if(n > num)
  117. {
  118. bRepeat = true;
  119. printf("too many number, to be repeat mode:\n");
  120. }
  121.  
  122. int *A = (int*)malloc(n*sizeof(int));
  123. memset(A, 0, sizeof(n*sizeof(int)));
  124. int cur = 0;
  125. int number = Permutation(st, en, n, A, cur, bRepeat);
  126. delete [] A ;
  127. A = NULL;
  128. printf("over!\n");
  129. return number;
  130. }

  

n全排列输出和 n个数的组合(数字范围a~b)的更多相关文章

  1. 有n个数,输出其中所有和为s的k个数的组合。

    分析:此题有两个坑,一是这里的n个数是任意给定的,不一定是:1,2,3...n,所以可能有重复的数(如果有重复的数怎么处理?):二是不要求你输出所有和为s的全部组合,而只要求输出和为s的k个数的组合. ...

  2. 输入n个数组,数组长度不等,每个数组取出一个数进行组合,求出所有的组合。

    转载声明:原文转自http://www.cnblogs.com/xiezie/p/5511707.html 昨天晚上,有个朋友找到我,他在用matlab编程,但是遇到一个问题,解决不了. 问题如下: ...

  3. 找出n个自然数(1,2,3,……,n)中取r个数的组合

    <?php /** * 对于$n和$r比较小, 可以用这种方法(当n=5, r=3时) */ function permutation1($n, $r) { for($i=1; $i<=$ ...

  4. hdu 1856 求集合里元素的个数 输出最大的个数是多少

    求集合里元素的个数 输出最大的个数是多少 Sample Input41 23 45 61 641 23 45 67 8 Sample Output42 # include <iostream&g ...

  5. JS实现的数组全排列输出算法

    本文实例讲述了JS实现的数组全排列输出算法.分享给大家供大家参考.具体分析如下: 这段js代码对数组进行全排列输出,改进了一些老的代码 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来, ...

  6. C语言:计算并输出给定10个数的方差。

    //计算并输出给定10个数的方差. #include<math.h> #include<stdio.h> ]) { double p = 0.0,f=0.0,g=0.0; ; ...

  7. C语言:输入一个数,输出比这个数小的所有素数,并求出个数。

    //C语言:输入一个数,输出比这个数小的所有素数,并求出个数. #include<conio.h> #include<stdio.h> #include<stdlib.h ...

  8. java实现全排列输出

    java实现全排列输出 转自:http://easonfans.iteye.com/blog/517286 最近在找工作,面试java程序员或者软件工程师,在笔试的时候常常见到这么一道题:全排列 的输 ...

  9. 编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示

    编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示. 要求: 1) 采用顺序栈实现算法: 2)从键盘输入一个十进制的数,输出相应的八进制数和十六进制数. ...

随机推荐

  1. JS通过getBoundingClientRect获取的height可能与css设置的height不一致

    发现如果DOM元素有padding-top或者padding-bottom值时, $(dom).height() = dom.style.display + padding-top + padding ...

  2. CLR 公共语言运行库

    1..支持多语言..只是语言是面向CLR的..均可以在此基础上运行. 2..程序集加载..程序打包之后的Dll文件由CLR(公共语言运行库)来编译并加载到可以执行状态..由CLR(公共语言运行库)加载 ...

  3. Orchard源码分析(2):Orchard.Web.MvcApplication类(Global)

    概述 分析一个的ASP.NET项目源码,首先可以浏览其项目结构,大致一窥项目其全貌,了解项目之间的依赖关系.其次可以浏览Web.config和Global.asax文件,找到应用程序的入口点. 本 文 ...

  4. MySQL关键字(保留字)列表

    在使用MySQL的时候,一般尽量避免用关键字作为表名,如使用关键字做表名,需要按标准写法给SQL语句加[](或是“)区分字段名和表名. 下面列出MySQL所有关键字,希望给使用MySQL的朋友提供一些 ...

  5. monit 监控并自动重启服务

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://coolerfeng.blog.51cto.com/133059/50126 Mo ...

  6. 删除多个Safari书签

    Safari 的书签多了,删除起来很麻烦,可以先选中所有书签,然后再按"Command+Delete",就可以全部删除了.

  7. php的exit和die

    首先, 两者是相等的: exit is equivalent to die; 其次, 都是语言构造器, language construct. 不是函数! 后面的内容用括号括起来只是为了方便... 用 ...

  8. 关于动态URL地址设置静态形式

    动态URL地址:http://station.com/index.php?c=play&a=index&id=12345 静态URL地址:http://station.com/play ...

  9. Highcharts X轴名称太长,如何设置下面这种样式

      Highcharts所有的图表除了饼图都有X轴和Y轴,默认情况下,x轴显示在图表的底部,y轴显示在左侧(多个y轴时可以是显示在左右两侧),通过chart.inverted = true 可以让x, ...

  10. sql server cpu占用过高优化

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...