- 浏览: 40131 次
- 性别:
最新评论
题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出所有可能的组合
大家一定还记得高中的时候学过的组合C(m,n)算法吧。。那么我们就用这个算法来做这道题吧。
其实做出这道题有俩种方法,一种是递归的。比较容易一点。另外一种是非递归的。
递归的代码如下:
/* * 主要是利用递归来来实现。主要思想是把一个字符串分为俩段来处理,首先取出第一个字符串,然后用后面的字符来与它进行拼凑。 */ 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+1); } } }
非递归的代码如下:
/* * 采用了图的广度优先算法。也可以说利用队列来实现。先进先出。首先取出第一个字母。然后入队、。 * 开始循环,出队。循环的结束条件的只要队列还有元素就就循环没有结束。进入循环之后,先判断元素是否符合 * 要求,如果符合就输出。如果不符合,就给它追加一个字母,开始点是由它的最后一个字符来决定。 * 比如说:是A就从0开始,是B就从1开始。(这里是难点。)一直找到字符串的末尾。找完之后就 * 去除取出来的这个元素。以此类推。。。 */ import java.util.ArrayList; import java.util.Scanner; public class Zuhe { public static void main(String[] args) { String str = "ABCDE";// 字符串 int n = 2;// 选择的个数 int count = 0;// 组合的总数 Scanner input = new Scanner(System.in); System.out.println("请输入要选择的个数(要少于" + str.length() + "个)"); n = Integer.parseInt(input.nextLine()); ArrayList<String> arr = new ArrayList<String>();//模拟队列 for (int k = 0; k < str.length(); k++) { //取出首节点 String s = str.charAt(k) + ""; //入队 arr.add(s); //开始循环 while (arr.size() > 0) { //出队 String ss = arr.get(0); //判断是否符合要求 if (ss.length() == n) { System.out.print(ss + " "); count++; if (count % 10 == 0) System.out.println(); } //追加字符。 for (int i = str.indexOf(ss.charAt(ss.length() - 1))+1; i < str.length(); i++) { if (ss.length() < n) { String m = ss + str.charAt(i); arr.add(m); } } //去除取出来的节点。 arr.remove(0); } } System.out.println("共有" + count + "种组合"); } }
结果的输出效果:
请输入要选择的个数(要少于5个)
3
ABC ABD ABE ACD ACE ADE BCD BCE BDE CDE
共有10种组合
发表评论
-
2012-03-16 20:52 最大公约数;最小公倍数
2012-05-18 21:45 1335求最小公倍数方法如下: (1)、两数相乘法。 ... -
裴波那契算法
2012-05-18 21:40 840裴波那契算法,数组算法 #include<st ... -
一些的算法的格式
2012-05-17 12:15 1042做题目做久了之后就会发现,算法是有格式的。 一、深度优 ... -
第三届蓝桥杯预赛真题-C++本科组-10题(Java实现)
2012-05-15 11:11 943今盒子里有n个小球,A、B两人轮流从盒中取球,每个 ... -
第三届蓝桥杯预赛真题-C++高职组-10题(Java实现)
2012-05-15 10:57 12562x3=6个方格中放入ABCDE五个字母,右下角的那个 ... -
第三届蓝桥杯预赛真题-Java高职组-10题
2012-05-14 13:16 1942匪警请拨110,即使手机欠 ... -
第三届蓝桥杯预赛真题-Java本科组-10题
2012-05-14 12:41 1481泊松是法国数学家、物理学家和力学家。他一生致力科学事 ... -
八皇后-位运算版
2012-01-12 18:38 1188八皇后问题,是一 ... -
计算24点-利用二叉树原理
2012-01-10 21:03 1621问题描述80年代全世界流行一种数字游戏,在中国我们把这种游戏称 ... -
吸血鬼数字
2012-01-09 20:32 909题目: 吸血鬼数字是 ... -
字符串的排列(A(m,n)),可重复选
2012-01-09 13:28 1269题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多 ... -
蛇形矩阵
2012-01-09 13:38 1018Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上 ... -
寻找最短路径
2012-01-07 18:51 1146题目:给定一个起点和一个终点。在一个8*8的棋盘上找出一条最短 ... -
字符串的排列(A(m,n))
2012-01-07 18:18 954题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出 ... -
汉诺塔
2012-01-07 17:32 918关于汉诺塔大家应该很熟悉吧。 河內之塔(Towers ... -
三角螺旋矩阵
2012-01-07 17:27 1083打印如下矩阵,如果 n=7 则输出: 1 18 2 ...
相关推荐
基本字符串组合问题 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 上面我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用...
varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...
1.4.3. 有 n 个长为 m+1 的字符串 ................................................................ 82 1.4.4. n 支 队伍比赛 ..................................................................................
2023年第十四届蓝桥杯大赛软件类省赛C&C++研究生组真题(包含代码&完整题解) C题-翻转 贪心 如果 S 中存在子串 101 或者 010,就可以将其分别变为 111 和 000,操作可以无限重复。...J题-反异或 01 串 字符串-回文串
正则表达式教程 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 <br>列目录时, dir *....
-n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。 4.应用技巧 在Linux 和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;} 匹配空行的正则表达式:\n[\s| ]*\r 匹配html标签的正则...
本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。 2. 排列算法 常见的排列算法有: (A)字典序法 (B)递增进位制数法 (C)递减进位制数法 (D)邻位对换法 (E)递归法 介绍常用的两种...
例如"/ac+/"表示被匹配的对象可以是"act"、"account"、"acccc"等在"a"后面出现一个或者多个"c"的字符串。"+"相当于"{1,}"。 星号:"*"字符用来匹配元字符前的字符出现零次或者多次。例如"/ac*/"表示被匹配的对象...
正则表达式的最简单形式是在搜索字符串中匹配其本身的单个普通字符。例如,单字符模式,如 A,不论出现在搜索字符串中的何处,它总是匹配字母 A。下面是一些单字符正则表达式模式的示例: /a/ /7/ /M/ 可以将许多...
给一个不包含’0’和’1’的数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。 下图的手机按键图,就表示了每个数字可以代表的字母。 1 2 3 abc def 4 5 6 ghi jkl mno 7 8 9 pqrs ...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
例如,序列 "\n" 在字符串中匹配的是一个直接量换行符.在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义: 正则表达式的直接量字符 字符 匹配 ________________________________ 字母数字...
要在字符串中添加换行符,可使用字符组合的是: A、\a B、\n C、\q D、\x" 4、Python中,3 ** 2 的结果是: A、3 B、6 C、9 D、12 5、Python中,在列表strs=['a','b','c']中的元素a和b中间添加一个元素m,正确的是:...
| 组合数 C(N, R) 27 | 最大 1 矩阵 27 | 约瑟夫环问题(数学方法) 27 | 约瑟夫环问题(数组模拟) 27 | 取石子游戏 1 27 | 集合划分问题 27 | 大数平方根(字符串数组表示) 28 | 大数取模的二进制方法 28 ...
在字符串中查找指定字符时,可以先将字符串显示在richTextBox 控件中,然后利用richTextBox 类的Find 方法在该控件中查找指定字符。在字符串中查找指定字符的代码如下: 第19章 加密与解密技术 833 M_int_index = ...
• 字符串核对 • 双色、三色河内塔 • 背包问题(Knapsack Problem) 数、运算 • 蒙地卡罗法求 PI • Eratosthenes筛选求质数 • 超长整数运算(大数运算) • 长 PI • 最大公因子、最小公倍数、因式...
你不希望在抽象和它的实现部分之间有一个固定的绑定关系。...一个简单的例子便是C o p l i e n 的S t r i n g 类[ C o p 9 2 ],在这个类中多个对象可以共享同一个字符串表示(S t r i n g R e p )。