`
inkind
  • 浏览: 5307 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

求若干字符的排列,不能包含相同字符

阅读更多
import java.util.HashSet;

public class CharsToStrings {

	public static void generateString(char[] charArray) {

	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		char[] charArray = new char[]{'a', 'b', 'c', 'd'};
		StringBuffer strBuf = new StringBuffer(3);
		int number = 0;

		// 循环方式
		for (int i = 0; i < charArray.length; i++) {
			strBuf.delete(0, strBuf.length());
			strBuf.append(charArray[i]);
			for (int j = 0; j < charArray.length; j++) {
				if (j == i)
					continue;
				strBuf.delete(1, strBuf.length());
				strBuf.append(charArray[j]);
				for (int k = 0; k < charArray.length; k++) {
					if (k == j || k == i)
						continue;
					strBuf.delete(2, strBuf.length());
					strBuf.append(charArray[k]);
					for (int p = 0; p < charArray.length; p++) {
						if (p == k || p == j || p == i)
							continue;
						strBuf.delete(3, strBuf.length());
						strBuf.append(charArray[p]);
						System.out.println(strBuf.toString());
						number++;
					}

				}
			}
		}
		System.out
				.println(number
						+ "\n---------------------------------------------------------------------");
		// 数学计数方式
		number = 0;
		long count = 1;
		for (int i = 0; i < charArray.length; i++) {
			count *= charArray.length;
		}
		StringBuffer charBuf = new StringBuffer(3);
		HashSet<Integer> remainderSet = new HashSet<Integer>(3);
		// System.out.println(count);
		for (long i = 0; i < count; i++) {
			charBuf.delete(0, charBuf.length());
			remainderSet.clear();
			long dividend = i;
			int n = charArray.length;
			while (n-- >= 0) {
				int remainder = (int) (dividend % charArray.length);
				if (remainderSet.contains(remainder)) {
					break;
				} else {
					remainderSet.add(remainder);
					charBuf.append(charArray[remainder]);
					dividend /= charArray.length;
				}
			}
			if (n < 0) {
				charBuf.reverse();
				System.out.println(i + ": " + charBuf.toString());
				number++;
			}

		}
		System.out
				.println(number
						+ "\n---------------------------------------------------------------------");

	}
}


输出:
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
24
---------------------------------------------------------------------
27: abcd
30: abdc
39: acbd
45: acdb
54: adbc
57: adcb
75: bacd
78: badc
99: bcad
108: bcda
114: bdac
120: bdca
135: cabd
141: cadb
147: cbad
156: cbda
177: cdab
180: cdba
198: dabc
201: dacb
210: dbac
216: dbca
225: dcab
228: dcba
24
---------------------------------------------------------------------
分享到:
评论

相关推荐

    用冒泡、插入、快速排序等对这些字符串按照字典顺序进行排序实验

    某个二维数组存放了一系列的字符串,试利用排序的一些算法(如插入、冒泡、快速排序等)例如:二维数组的字符串如下: char s[][20]={“while”,”if”,“else”,”do”,“for”,”switch”,“case”,};

    利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    荷兰国旗问题

    现有若干由红、白、蓝三种颜色的条块序列,要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。 输入 第1行是一个正整数n(n),...

    c程序设计习题参考(谭浩强三版)习题参考解答

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一...

    shell脚本编程之数组

    数组就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的元素。数组是在...

    c语言经典案例

    实例185 将若干字符串按照字母 顺序输出 262 实例186 用指向函数的指针比较大小 263 实例187 寻找指定元素的指针 265 实例188 字符串的匹配 266 第12章 常用数据结构 269 实例189 比较计数 270 实例190 找出最高分 ...

    输入输出显示—以AW60为例

    LCD是一种介于固态与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。四灯管设计分为三种摆放形式:一种是四个边...

    C语言程序设计标准教程

    3.数组名不能与其它变量名相同,例如: void main() { int a; float a[10]; …… } 是错误的。 4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0...

    SQL语句复习,SQL面试题

    在SQL语句中 字符串是由单引号括起来的若干字符 13 select ename||&quot; niahao&quot;&quot;dajiahao&quot; from emp;如果字符串中本身就有一个单引号 那么在SQL语句中进行表示时 用两个单引号表示一个单引号 14 ...

    C程序范例宝典(基础代码详解)

    实例068 将若干字符串按照字母顺序输出 85 2.3 指针与函数 86 实例069 用指向函数的指针比较大小 86 实例070 使用返回指针的函数查找最大值 88 实例071 使用指针函数求学生成绩 89 实例072 寻找指定元素...

    黑马程序员入学测试题详解

    3、 方法中的内部类能不能访问方法中的局部变量,为什么? 4、 定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法,例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。 5、 编写...

    黑马入学考试试题

    这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位...

    普及练习场-字符串处理-P1538 迎春舞会之数字舞蹈

    在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列。 为了配合每年的倒计时,同学们决定排出——“数字舞蹈”。顾名思义就是所有人一起排成若干个数字 -___-|||| 更为创新的是,每个人都是...

    《计算机应用基础》作业及答案.doc

    在微型计算机的系统总线中不包括 ( ) A.内部总线 B.地址总线 C.数据总线 D.控制总线 3.GB18030-2000《信息技术交换用汉字编码字符集基本集的扩充》共收录汉字 ( ) A.27000多个 B.18000多个 C.6000多个 D...

    Excel新增工具集

    3、多个工作表中相同位置的行(列)集中到同一表:本工作簿中有若干格式相同的表,为了便于观察各表相同位置数据的变化,可以首先用鼠标选定要观察的区域,然后执行本命令,则各工作表的同位置区域数据集中排列到同一...

    Java 入学考试题

    1、假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的...

    东北大学c语言上机报告

    文件song.txt存放了若干首歌曲的 记录,每条记录由歌名(40个字符)和演唱者(30个字符)组成,现将该文件记录的结构改成下面的格式,以减少文件长度。 M N ..... ..... 其中:M是歌名长度,N是...

    LCD显示模式

    由基本的LCD显示原理可知,LCD显示一个点重要的因素就是点的坐标...其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形、曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各

    显示/光电技术中的LCD显示模式

    由基本的LCD显示原理可知,LCD显示一个点最重要的因素就是点的坐标...其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形、曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示

Global site tag (gtag.js) - Google Analytics