`

字符串的排列(A(m,n)),可重复选

 
阅读更多

题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16 共有多少种组合方式?

比如:取1个球可以构成的组合有 A B C D E 5种,取2个球可以构成的组合有  5+4+3+2+1=15 BA AB 这种重复的排列 算成一种)

AA AB AC AD AE

BB BC BD BE

CC CD CE

DD DE

EE

3 个球可以构成的组合是 5+4+3+2+1+4+3+2+1+3+2+1+2+1+1= 35

AAA AAB AAC AAD AAE

ABB ABC ABD ABE

ACC ACD ACE

ADD ADE

AEE

 

BBB BBC BBD BBE

BCC BCD BCE

BDD BDE

BEE

 

CCC CCD CCE

CDD CDE

CEE

 

DDD DDE

DEE

 

EEE

 

代码如下

 

/*
 * 主要是利用递归来来实现。主要思想是把一个字符串分为俩段来处理,首先取出第一个字符串,然后用后面的字符来与它进行拼凑。
 */
import java.util.Scanner;

public class Zuhe {
	private static String str = "ABCDE";// 字符串
	private static int n = 3;// 选择的个数
	private static int count = 0;//组合的个数

	public static void main(String[] args) {
		new Zuhe();
	}

	Zuhe() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入要选择的个数(要少于" + str.length() + "个)");
		n = Integer.parseInt(input.nextLine());

		find("", 0);
		System.out.println("共有"+count+"种组合");

	}
/*
 *第一个参数是代表第一个字符,第二个参数代表开始寻找点的位置
 */
	public static void find(String s, int i) {
		// 保存上一次的字符串
		String temp = s;
		//判断是否符合要求
		if (s.length() == n) {
			count++;

			System.out.print(s + " ");
			if (count % 10 == 0)
				System.out.println();
			return;
		}
		//从寻找点开始循环,
		for (int k =i; k < str.length(); k++) {
			s = temp;
			s += str.charAt(k);
			find(s, k);
		}
		

	}

}

 

 

 

输出结果如下:

请输入要选择的个数(要少于5个)
3
AAA AAB AAC AAD AAE ABB ABC ABD ABE ACC
ACD ACE ADD ADE AEE BBB BBC BBD BBE BCC
BCD BCE BDD BDE BEE CCC CCD CCE CDD CDE
CEE DDD DDE DEE EEE 共有35种组合

 

0
0
分享到:
评论

相关推荐

    字符串排列问题,不含重复

    问题描述: 键盘输入一个仅由小写字母组成的字符串,输出以该串中任 取M个字母的所有排列及排列总数。 例如:输入字符串abcd,输入m=3 则输出为:abc,abd,acd,bcd,n=4

    LeetCode判断字符串是否循环-Leetcode:力码

    有g个孩子,s块蛋糕,每个孩子有一个贪心因子m,每块蛋糕可大可小n,若蛋糕大小n大于等于m,则可以分配这块蛋糕给这个孩子。每个孩子只能分得一块蛋糕。 求满足孩子的最大值。 167 给定一个按升序排列好的整数数组,...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    世界500强面试题.pdf

    1.4.3. 有 n 个长为 m+1 的字符串 ................................................................ 82 1.4.4. n 支 队伍比赛 ..................................................................................

    permnsub(V,N, IX):所有重复排列的子集-matlab开发

    它的功能现在在我的函数 PERMN 中实现,可在文件交换中使用permnsub - 所有重复排列的子集M = permnsub(V,N,IX)返回所有排列的子集,其中N 个元素的重复,取自向量 V 中的元素。 M 有numel(IX)-N的大小。 V ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    “NOT”可选参数,加上 NOT表示与指定的字符串不匹配时满足条件;“字符串”表示指定用来匹配的字符串,该字符串必须加单引号或双引号。 通配符: % 任意字符 [sql] view plain copy select * from STUDENT where ...

    SQL语句集锦.rar

    取n到m条记录.txt 合并字符串.txt 多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt 嵌套游标的使用.txt 拷贝表格.txt 排序.txt 断开并更改数据库名称....

    uniqueperms:具有重复的集合的唯一排列-matlab开发

    V 可以是数值数组或字符串元胞数组。 例子: uniqueperms([4 2 1 2]) % 返回 12 个唯一排列: % [ 1 2 2 4 ; 1 2 4 2 ; 1 4 2 2 ; ...; 4 2 1 2 ; 4 2 2 1] % perms([3 2 1 2]) 将返回 4 个元素的所有 24 个排列。 ...

    常用算法代码

    | 最短公共祖先(多个短字符串) 33 Geometry 计算几何 34 | GRAHAM 求凸包 O(N * LOGN) 34 | 判断线段相交 34 | 求多边形重心 34 | 三角形几个重要的点 34 | 平面最近点对 O(N * LOGN) 34 | LIUCTIC 的...

    文本三剑客:grep sed awk

    它主要用于字符串的模式分隔、匹配、查找及替换操作 元字符 * 重复匹配前一个字符0到多次 . 匹配除了换行符外任意一个字符,类似通配符? ^ 匹配行首或后面字符的非 $ 匹配行尾 [ ] 匹配中括号中的指定...

    ACM巨全模板 .pdf

    7.后缀数组 (按字典序排字符串后缀) 8.前缀循环节(KMP的fail函数) 9.AC自动机 (n个kmp) 10.后缀自动机 小技巧: 1.关于int,double强转为string 2.输入输出挂 3.低精度加减乘除 4.一些组合数学公式 5.二维坐标的离散...

    如何编写批处理文件批处理文件批处理文件

    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个 指定不同解析选项的关键字。这些关键字为: eol=c - 指一个行注释字符的结尾(就一个) skip=n - 指在文件开始时忽略的行数。...

    数据结构(C++)有关练习题

    2、 已知a[n]为整数数组,试写出实现下列运算的递归代码(C或C++代码均可): 要求: a. 求数组中的最大整数; b. 求n个数的和; c. 利用堆栈类,将本题a和b的代码改成非递归的方式。 实验报告...

    LeetCode容器容纳水的最大值-Leetcode-practice:Leetcode-练习

    LeetCode容器容纳水的最大值 Leetcode-practice ''' 01 题目 给定一个整数数组和一个目标值 ...在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符

    Dos命令大全

    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个 指定不同解析选项的关键字。这些关键字为: eol=c - 指一个行注释字符的结尾(就一个) skip=n - 指在文件开始时忽略的行数。 ...

    【。net 专业】 面试题

    A) K B)L C) M D) N 答案:B 问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少? A)1个 B)3个 C)6个 D)9个 答案:A 问题三:下列哪一个是单词密码? A) KLLN B) LOML C) MLLO D)...

    MATLAB实现K-means聚类

    % lower 把字符串变为小号字母 strmatch 为字符串找到一个合适的匹配,并返回对应的索引 i = strmatch(lower(distance), distNames); if length(i) &gt; 1 % 大于1刚至少有一种距离 error(sprintf('Ambiguous ''...

    leetcode2-CodeLab-Fall-2020:代码实验室2020

    给定两个字符串,编写一个方法来判断一个是否是另一个的排列 第 2 天 —— —— LeetCode 86 - 围绕值 X 的分区列表 LeetCode 708 - 插入已排序的循环链表 LeetCode 1290 - 将链表中的二进制数转换为整数 第 2 周 ...

    leetcode双人赛-Leetcode:力码

    表示字符串 s 的长度,n 表示字符串 p 的长度。 首先,我创建了一个大小为 (m+1)*(n+1) 的数组。 如果 p[0...j-1] 可以匹配 s[0...i-1],则数组中的条目 i,j 为真。 递归是: 当 p.charAt(j - 1) != '*' 时: match...

    《数据结构 1800题》

    16.设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5, 有 5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。 ①以下是该函数的程序段,请将未完成的部分填入,...

Global site tag (gtag.js) - Google Analytics