题目:现有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种组合
分享到:
相关推荐
新字符串中的字符按照在字符串`t`中的原始顺序排列,并且要去掉重复的字符。 ### 1. 问题理解与分析 题目要求我们找出字符串`t`中所有不在字符串`s`中出现的字符,并按照`t`中的顺序排列组成新的字符串存储到`p`所...
4. **字符串排列组合问题**: - 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符...
本压缩包“易语言源码排列组合模块(M选N)源码.rar”提供了实现M选N排列组合功能的源代码,适用于学习易语言编程、算法设计以及组合数学的应用。排列组合是组合学中的基本概念,对于理解和解决许多实际问题,如概率...
本文将深入探讨如何将一个十进制整数m转换成2至16进制的字符串,重点使用VB6.0(Visual Basic 6.0)编程语言进行源代码编写。VB6.0是微软公司开发的一款面向对象的可视化编程工具,它提供了丰富的控件和函数库,使得...
- **输入**:第一行输入元素个数 `n`(1 ≤ n ≤ 15),紧接着的一行输入由 `n` 个字符组成的字符串。 - **输出**:按照题目要求输出所有不同的排列,并在最后一行输出排列的总数。 #### 样例分析 对于样例输入 `4...
然而,当字符串包含重复字符时,上述方法会产生重复的排列。例如,字符串"abb"的全排列会有重复。为了去除重复,我们需要修改算法,使其在交换字符时检查相邻字符是否相同。如果相同,则跳过交换,以避免生成重复的...
// i和j用于循环控制,n表示输入的字符串数量 // 输入n个字符串 for(i = 0; i < n; i++) scanf("%s", str[i]); // 冒泡排序 for(i = 0; i < n; i++) for(j = 0; j < n - i; j++) if(strcmp(str[j], str[j + 1]...
题目要求输入一组含有重复字符的字符串,并输出所有可能的不同排列组合以及总的排列数量。 #### 解题思路 解决这类问题的核心在于如何有效地生成所有的不同排列,并且在生成的过程中避免重复。一种常见的方法是使用...
在这个部分,我们有一个字符串排序的函数,它接受一个二维字符数组`a[M][N]`作为参数。函数使用冒泡排序算法对字符串进行升序排列。冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列,比较相邻元素并交换...
这种方法涉及对字符串集合进行随机排列,然后从中取出指定长度的子串: ```javascript function randomString(length) { var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; var ...
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...
- 每次选择删除当前可选范围内最大的数字,直到删除了 \( k \) 个数字为止。 - 这是因为如果先删除较大的数字,则可以在保留较小数字的同时构造出更小的新数。 3. **实现步骤:** - 创建一个空数组 \( b \) 来...
有g个孩子,s块蛋糕,每个孩子有一个贪心因子m,每块蛋糕可大可小n,若蛋糕大小n大于等于m,则可以分配这块蛋糕给这个孩子。每个孩子只能分得一块蛋糕。 求满足孩子的最大值。 167 给定一个按升序排列好的整数数组,...
本文将详细介绍如何使用Go语言来解决一个具体的排列组合问题:从n个数中选取m个数的所有可能组合,并通过一个实际的示例来展示其实现过程。 #### 二、组合问题解析 组合是指从n个不同元素中取出m(m≤n)个元素并组成...
数据结构第五章作业的答案主要涉及了数组和广义表的相关概念,包括字符串比较、对称矩阵的压缩存储、数组的存储、特殊矩阵的定义、广义表的操作等知识点。 1. 两个串相等的充要条件是串中各位置字符均对应相等,即...
在这个问题中,我们将关注如何使用Python3实现一个字符串(假设无重复字符)的所有可能排列。 首先,我们可以采用回溯法或者递归的方式来解决这个问题。这里提供两种不同的实现方法: **方法一:基于递归的回溯法*...
1. `chang(char str[], int m)`函数:这个函数接收一个字符串`str`和一个整数`m`作为参数,作用是将字符串中的字符向左移动一位,以便在递归过程中改变字符顺序。例如,字符串"ABCD"经过一次左移变为"BCDA"。 2. `...
4. 输出:最后,你需要将计算出的所有排列或组合以适当格式(如字符串、数组等)输出,供用户查看或进一步处理。 在易语言中,可能的代码框架如下: ```易语言 .定义整数变量 N, M, i, j .定义数组 元素集, 结果集...
- **题目描述**: 给定一个字符串,如 "abcdef",要求把字符串前面的若干个字符移动到字符串的尾部,例如将 "a" 和 "b" 移动到尾部,使得原字符串变成 "cdefab"。要求实现一个函数,其时间复杂度为 O(n),空间复杂度...