`
xinlingwuyu
  • 浏览: 138406 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻

阅读更多

一个比较优化的算法

  1. import java.util.Set;   
  2. import java.util.TreeSet   
  3. /**  
  4.  * 原始版本没有考虑重复问题,我进行了修正.<br>  
  5.  * 此算法的精华就是,让一个字符串的所有位置都进行互换,<br>  
  6.  * 这样就产生了所有可能出现的字符串。  
  7.  *   
  8.  * @author 赵学庆,nicky_zs <A href="http://www.java2000.net">www.java2000.net</A>  
  9.  */  
  10. public class MyTest {   
  11.   public static void main(String args[]) {   
  12.     char[] number = new char[] { '1''2''2''3''4''5' };   
  13.     perm(number, 0, number.length - 1);   
  14.     System.out.println(set.size());   
  15.     int cols = 10;   
  16.     for (String s : set) {   
  17.       System.out.print(s + " ");   
  18.       if (cols-- == 1) {   
  19.         System.out.println();   
  20.         cols = 10;   
  21.       }   
  22.     }   
  23.   }   
  24.   public static void addNumber(String str) {   
  25.     set.add(str);   
  26.   }   
  27.   public static Set<String> set = new TreeSet<String>();   
  28.   public static void perm(char[] n, int beg, int end) {   
  29.     if (beg == end) {   
  30.       String result = String.valueOf(n);   
  31.       if (n[2] == '4')   
  32.         return;   
  33.       if (result.contains("35") || result.contains("53"))   
  34.         return;   
  35.       addNumber(String.valueOf(n));   
  36.       return;   
  37.     }   
  38.     for (int i = beg; i <= end; ++i) {   
  39.       swap(n, beg, i);   
  40.       perm(n, beg + 1, end);   
  41.       swap(n, beg, i);   
  42.     }   
  43.   }   
  44.   public static int number = 0;   
  45.   public static void swap(char[] n, int a, int b) {   
  46.     char temp = n[a];   
  47.     n[a] = n[b];   
  48.     n[b] = temp;   
  49.   }   
  50. }
分享到:
评论

相关推荐

    易语言数字排列组合源码

    易语言是一种专为初学者设计的编程语言,它采用了贴近自然语言的...通过对这段源码的分析和实践,你不仅可以了解易语言的编程特性,还能深入理解排列组合的基本原理,这对于今后解决更复杂的编程问题具有重要的意义。

    从n个数组中取出所有排列组合(Java实现)

    在编程领域,数组排列组合问题是一个经典的问题,它涉及到算法设计和数据结构的理解。这个问题的主要目标是从给定的n个数组中找出所有的可能排列组合。Java作为一种强大的编程语言,提供了丰富的工具和方法来解决...

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    对于本题中的“输出自然数1到n的所有不重复的排列”,回溯法非常适合,因为它能够有效地生成所有可能的排列组合而不产生重复。 ### 问题描述与分析 题目要求输出自然数1到n的所有不重复排列,即n的全排列。具体来...

    输出1到n的所有排列

    每组排列都按顺序打印,如“第1组:1,2,3,4”等。 总结来说,本示例通过回溯法实现了全排列问题的求解,展示了如何利用编程来生成一个整数序列的所有可能排列,这对于理解和应用回溯法解决其他类似的组合问题具有...

    案例排列组合(递归)

    在编程领域,排列组合是解决许多问题的基础,特别是在算法设计和数据处理中。这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以...

    排列组合有重复

    在数学和计算科学中,排列组合是指从一个集合中选择一些元素,并且这些元素的顺序是重要的。换言之,排列组合是指从一个集合中选择一些元素,并且考虑这些元素的顺序。 二、回溯算法的应用 回溯算法是一种常用的...

    排列组合生成算法

    排列组合生成算法是计算机科学中一个重要的概念,特别是在解决优化问题和数据分析时有着广泛应用。在C++编程语言中实现这样的算法,可以帮助我们有效地处理大量数据的排列和组合问题。下面将详细探讨排列组合生成...

    基于c语言的排列组合算法

    在编程领域,排列和组合是两种基本的数学概念,它们被广泛应用于算法设计,尤其是在解决计数问题和遍历所有可能性时。C语言作为一种强大的、底层的编程语言,经常被用来实现这些算法,以提高效率和灵活性。在这个...

    C++数学与算法系列之排列和组合

    则第 1 个数字有 5 种选择,第 2 个数字有 4 种选择,第 3 个数字有 3 种选择,第 4 个数字有 2 种选择,最终可选择的个数为 5*4*3*2=120,和前面相比较,即为 5 的阶乘除以 1 的阶乘。 如果不是选择 4 个数字,...

    c语言实现的排列组合程序

    在编程领域,排列和组合是两个重要的概念,它们在解决许多问题时都会被用到,尤其是在算法设计中。本文将详细探讨如何使用C语言来实现排列组合算法,并结合递归解决P(m,n)问题。 首先,我们要理解排列和组合的基本...

    IT面试笔试--排列和组合的代码实现,运行正确+详细注释

    在IT面试和笔试中,排列和组合是常考的算法问题,主要考察候选人的逻辑思维和编程能力。这里我们将详细探讨排列和组合的代码实现,包括全排列和组合的多种方法。 **全排列**是将一组给定的元素按照所有可能的顺序...

    c++ 排列组合算法,代码简单

    根据给定的文件信息,我们可以总结出以下关于C++中排列组合算法的知识点: ### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中...

    排列组合迭代

    在计算机科学和编程领域,排列组合是解决许多问题的基础,特别是在算法设计中。"排列组合迭代"是指通过循环和递归等控制结构来系统地生成所有可能的排列或组合。这种技术广泛应用于数据结构和算法设计,如搜索、优化...

    VB写的排列组合的小程序

    2. **数组**:数组在VB中用于存储一组数据,例如,在排列组合中,我们可以用数组来保存每次选择的对象。 3. **选择函数**:为了从一组对象中选择特定数量的对象,可以编写自定义函数,如“Combination”和...

    Permutation with Repetition R={ r1,r2,… ,rn }是要进行排列的n 个元素。其中元素r1,r2,… ,rn可能相同。试设计一个算法,列出R的所有不同排列。

    本问题是关于如何设计一个算法来求解具有重复元素的集合的所有不同排列组合。具体来说,给定一个包含`n`个元素的集合`R={r1,r2,… ,rn}`,其中元素之间可能存在重复。目标是找出这个集合的所有不同的排列组合。 ###...

    钱币组合方法问题

    设有 3 种不同的钱币(1 分、2 分、5 分)各若干张,可用这 3 种钱币产生许多不同的面值。如给定面值 7 分,能组成给定面值 7 分的方法有如下 4 种: 1. 3 个 1 分 + 2 个 2 分; 2. 1 个 1 分 + 3 个 2 分; 3. 2 ...

    排列组合算法排列组合算法.doc

    排列组合是组合数学中的基本概念,它在计算机科学和算法设计中有着广泛的应用,尤其是在解决优化问题、数据处理和概率计算等领域。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,而组合则是...

    quanpailie.rar_数组排列组合

    总的来说,"quanpailie.rar_数组排列组合"的程序通过全排列算法展示了如何利用计算机生成并输出一个数字串的所有可能排列,这不仅是对基础算法的理解和应用,也是解决实际问题的一种有效工具。通过深入学习和实践...

    用0到9生成十位数的所有排列组合(java代码).docx

    ### 使用Java生成0到9之间数字的所有十位数排列组合 #### 问题描述 本问题旨在探讨如何通过Java编程语言生成0至9这十个数字的所有可能的十位数排列组合。这里的排列指的是从0到9这十个数字中选出10个(允许重复),...

    PTA-条件与循环-求所有由1、2、3、4这4个数字组成的素数

    素数是指除了1和它自身外,不能被其他正整数整除的自然数,例如2、3、5、7等。判断一个数是否为素数,我们可以利用数学方法,例如对于正整数n,只需要检查从2到sqrt(n)的所有整数是否能整除n,如果有,则n不是素数;...

Global site tag (gtag.js) - Google Analytics