`
qmug
  • 浏览: 201498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

三个字符的排列组合

阅读更多

三个字符的排列组合程序如下:

package ww;

import java.math.BigInteger;
import java.util.*;

public class PermutationGenerator {

	private int[] a;
	private BigInteger numLeft;
	private BigInteger total;

	public PermutationGenerator(int n) {
		if (n < 1) {
			throw new IllegalArgumentException("Min 1");
		}
		a = new int[n];
		total = getFactorial(n);
		reset();
	}

	public void reset() {
		for (int i = 0; i < a.length; i++) {
			a[i] = i;
		}
		numLeft = new BigInteger(total.toString());
	}

	public BigInteger getNumLeft() {
		return numLeft;
	}

	public BigInteger getTotal() {
		return total;
	}

	public boolean hasMore() {
		return numLeft.compareTo(BigInteger.ZERO) == 1;
	}

	private static BigInteger getFactorial(int n) {
		BigInteger fact = BigInteger.ONE;
		for (int i = n; i > 1; i--) {
			fact = fact.multiply(new BigInteger(Integer.toString(i)));
		}
		return fact;
	}

	public int[] getNext() {

		if (numLeft.equals(total)) {
			numLeft = numLeft.subtract(BigInteger.ONE);
			return a;
		}

		int temp;

		// Find largest index j with a[j] < a[j+1]

		int j = a.length - 2;
		while (a[j] > a[j + 1]) {
			j--;
		}

		// Find index k such that a[k] is smallest integer
		// greater than a[j] to the right of a[j]

		int k = a.length - 1;
		while (a[j] > a[k]) {
			k--;
		}

		// Interchange a[j] and a[k]

		temp = a[k];
		a[k] = a[j];
		a[j] = temp;

		// Put tail end of permutation after jth position in increasing order

		int r = a.length - 1;
		int s = j + 1;

		while (r > s) {
			temp = a[s];
			a[s] = a[r];
			a[r] = temp;
			r--;
			s++;
		}

		numLeft = numLeft.subtract(BigInteger.ONE);
		return a;

	}

	// 程序测试入口
	public static void main(String[] args) {

		int[] indices;
		String[] elements = { "2", "f", "b" };
		PermutationGenerator x = new PermutationGenerator(elements.length);
		StringBuffer permutation;

		while (x.hasMore()) {
			permutation = new StringBuffer();
			indices = x.getNext();
			for (int i = 0; i < indices.length; i++) {
				permutation.append(elements[indices[i]]);
			}
			System.out.println(permutation.toString());

		}
	}

}

输出的结果是:
2fb
2bf
f2b
fb2
b2f
bf2
分享到:
评论

相关推荐

    计算数字排列组合,任意数字的组合。

    4. **库函数支持**:许多编程语言提供了内置函数或第三方库来处理排列组合,如Python的itertools库中的permutations和combinations函数。 5. **应用实例**:计算数字排列组合在密码学中用于生成密码的多样性,在...

    排列组合有重复

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

    PHP多个字符串排列组合的算法,组二,组三

    在PHP编程语言中,处理字符串的排列组合是常见的任务,特别是在数据分析、彩票系统或其他需要生成所有可能结果的场景中。本篇文章将详细讲解如何利用PHP实现字符串的组合算法,特别是针对“组二”和“组三”的组合...

    高中数学中排列组合

    例如,同样是从1、2、3中取两个数字,但不考虑顺序,我们只需要考虑组合{1,2}、{1,3}和{2,3}这三个。组合数可以通过以下公式计算:C(n, m) = n! / [m!(n-m)!],即将排列数除以m!和(n-m)!的结果,因为排列时考虑了...

    matlab_排列组合

    ### MATLAB中的排列组合知识点 #### 一、MATLAB排列组合函数概述 在MATLAB中,排列组合相关的函数被广泛应用于统计学、概率论以及各种工程计算领域。这些函数可以帮助我们解决许多数学问题,如组合数量的计算、...

    疯狂排列组合

    例如,从三个数字中选取两个,不管选取的顺序,2和3被选与3和2被视为相同的组合。组合计数通常使用组合公式C(n, k) = n! / (k!(n-k)!), 其中n是总数,k是选取的数量,"!"表示阶乘。《疯狂排列组合》软件能够快速计算...

    排列组合源代码程序, 简单易懂

    总的来说,理解和掌握排列组合的算法及其在源代码中的实现是编程能力的重要组成部分。通过递归和分治策略,我们可以有效地解决这些问题,并且在实际项目中应用这些概念,如优化搜索路径、生成所有可能的解决方案等。

    新建文本文档_排列组合_源码

    三位数意味着我们需要选择三个不同的数字来占据这三个位置,所以问题可以转换为求解P(4, 3)。 根据排列公式,我们可以计算P(4, 3) = 4! / (4-3)! = 4! / 1! = 4 × 3 × 2 × 1 = 24。这意味着有24种不同的三位数...

    Java实现abc字符串排列组合

    可重复排列是指从abc三个字符中选择字符,组成长度为3的字符串。由于可以重复选择,故有27种可能的结果。 例如,public class Permutation { public static void main(String[] args) { char[] chs = {'a','b','c'}...

    排列组合题目精选附答案.doc

    例如第1题中,必须站在的右边,可以先固定和的位置,再考虑其他三个位置的排列。 2. **不相邻问题**:当要求某些元素不相邻时,可以使用插空法。例如第2题中,甲乙不相邻,先排列其他五个元素,然后在这五个元素...

    排列组合21种模型解析

    排列组合是数学中的一个重要概念,尤其在解决实际问题和应对高考等考试中具有较高的出现频率。排列组合问题涉及元素的排列、组合以及各种特定条件下的计数方法。以下是21种模型的详细解释: 1. **相邻问题** - 捆绑...

    基本原理排列组合[参考].pdf

    排列组合是离散数学中的重要概念,主要应用于统计和概率计算。它分为排列和组合两种类型,两者的主要区别在于选取元素时是否考虑顺序。 1. **排列**:当选取的元素顺序重要时,我们称之为排列。例如问题4,从A、B、...

    Delphi写的NM排列组合,生成文本txt到指定目录.rar

    Delphi写的NM排列组合,生成文本txt到指定目录,定义函数指针,生成N个数,输出N个数的全排列 ,OrderedCount为已经有输出顺序的数字。 比如 从Min=6开始选 (ToReachCount-NowNumCount)个数字(假设这个值为3)的话,也...

    Java 对已知数进行最大限度排列组合的例子.rar

    Java排列组合源码实例,对已知数进行最大限度组合,有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不...

    《数学广角》—简单的排列组合[定义].pdf

    组合则是不考虑元素顺序的选取,例如在握手问题中,三个人之间的所有可能握手方式并不受顺序影响,因为A与B握手与B与A握手是相同的。教学中,教师通过让学生实际握手和画图,展示了组合与排列的区别,即组合的数量不...

    排列组合公式排列组合计算公式.pdf

    而如果将号码球分为三组,组成“三国联盟”,则是一个组合问题,因为只要三个号码球在一起,不论顺序如何,都被视为同一个组合。 在解决排列组合问题时,通常会使用加法原理和乘法原理。加法原理指出,如果事件A和...

    排列组合公式排列组合计算公式----高中数学.doc

    例如,有 9 个球,要求组成三个一组,代表“三国联盟”。那么,可以组成多少个“三国联盟”?由于顺序不是重要的,因此使用组合公式: C(9, 3) = 9 × 8 × 7 / 3! = 84 排列组合公式的应用: 1. 排列问题:例如...

    Golang排列组合算法问题之全排列实现方法

    本文实例讲述了Golang排列组合算法问题之全排列实现方法。分享给大家供大家参考,具体如下: 【排列组合问题】 一共N辆火车(0&lt;N&lt;10),每辆火车以数字1-9编号,要求以字典序排序输出火车出站的序列号。 输入:...

    排列组合练习之排列组合练习的后半部分

    排列组合是离散数学中的重要概念,主要应用于统计和概率计算,以及计算机科学中的算法设计。在本题中,我们关注的是排列和组合的实践应用,通过编程来解决相关问题。 首先,我们要理解排列和组合的基本定义。排列是...

    排列组合典型例题.doc

    "排列组合典型例题" 排列组合是数学中一个重要的分支,用于研究对象的排列和组合方式。本文档提供了五个典型的排列组合例题,涵盖了排列组合的基本概念和方法。 典型例题一:四位偶数的排列 在这个例题中,我们...

Global site tag (gtag.js) - Google Analytics