题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出所有可能的排列
我的想法是,先用组合的算法把所有的组合算出来,然后对每个组合进行全排列。
代码如下:
import java.util.Scanner;
/*
* 主要的思想是在组合的基础上进行全排列
*/
public class Pailie {
private static String str = "ABCDEF";// 字符串
private static int n = 3;// 选择的个数
public static void main(String[] args) {
new Pailie();
}
Pailie() {
Scanner input = new Scanner(System.in);
System.out
.println("请输入要从(" + str + ")中选择的个数(要少于" + str.length() + "个)");
n = Integer.parseInt(input.nextLine());
zuhe("", 0);
}
//组合的算法
public static void zuhe(String s, int i) {
String temp = s;// 保存上一次的字符串
if (s.length() == n) {
//System.out.println(s);
char c[] = s.toCharArray();
pailie(0, c);
}
// 先取字符的第一位,然后判断长度是否够题目要求。如果够就得了一个组合。否则继续取下一位加上第一位。再判断。以此类推
for (int k =i; k < str.length(); k++) {
s = temp;
s += str.charAt(k);
zuhe(s, k+1);
}
}
//排列的算法
// 先对字符最后俩位进行全排列,也就是交换。然后再对最后三位进行全排列。也就是在前一个全排列的基础上进行交换。以此类推。直到字符串的第一位。
public static void pailie(int i, char[] c) {
if (i == c.length - 1) {
for (char d : c) {
System.out.print(d + " ");
}
System.out.println();
} else {
for (int k = i; k < c.length; k++) {
// 交换
char temp = c[i];
c[i] = c[k];
c[k] = temp;
// 进行递归
pailie(i + 1, c);
// 还原数组
temp = c[k];
c[k] = c[i];
c[i] = temp;
}
}
}
}
分享到:
相关推荐
问题描述: 键盘输入一个仅由小写字母组成的字符串,输出以该串中任 取M个字母的所有排列及排列总数。 例如:输入字符串abcd,输入m=3 则输出为:abc,abd,acd,bcd,n=4
_ _ _ _ _ _ _ _ _ _ _ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ ...查找字符串B的所有排列的公式为P(n,r)= n! (nr)!; 知道一点大惊叹号是一件坏事;)。 因此,在第一个强力解决方案之后,
给定两个字符串,求串a中的每个字符是否可以在串b中找到对应的字符,串b中的每个字符只可以使用一次,但是字符可以重复出现。 2017年4月14日 349 求两个数组的交集,不允许出现重复的数字。 404 求左子树节点之和。 ...
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把...
要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。 三、 文本编辑器(10) 要求:(1)编辑文本; ...
W = permpos(V, N) 其中 V 是具有 M 个元素的矩阵 W 的数组其中每一行 a 以保留顺序包含 V 的值,但在 N 列上唯一排列。 其余位置设置为南。 W = permpos(V, N, F) 使用值 F 而不是 NaN。 [W, B] = permpos(V, ...)...
描述: 获取字符串chr2在字符串chr1中出现的位置。n 和m 可选,省略是默认为1;n 代表开始查找 的起始位置,当n 为负数从尾部开始搜索;m 代表字串出现的次数。 Examples:select instr('pplkoopijk','k',-1,1) “test...
varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...
printf("\n%d %d\n",a[5.2],a[5.8]); } 本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大到小输出各个奇数。在第一个 for语句中,表达式3省略了。在下标变量中使用了表达式i++,用以修改...
写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 76 10.6输入一行文字,找出其中大写字母,小写字母,空格,数字及其他字符各有多少。 77 10.7写一个函数,将一个3×3的矩阵转置。 77 9.8...
1.4.3. 有 n 个长为 m+1 的字符串 ................................................................ 82 1.4.4. n 支 队伍比赛 ..................................................................................
串中各位置字符任意 D.串中各位置字符均对应相等 2.对称矩阵的压缩存储:以行序为主序存储下三角中的元素,包括对角线上的元素。二维下标为( i, j ),存储空间的一维下标为k,给出k与 i, j (i)的关系k=( ) (1, j...
1. 前言 本文介绍了常用的排列组合算法,包括全排列算法,全组合...生成给定全排列的下一个排列 所谓一个的下一个就是这一个与下一个之间没有字典顺序中相邻的字符串。这就要求这一个与下一个有尽可能长的共同前缀,
unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir 3.使用说明 umount 命令是mount命令的逆操作,它的参数和使用方法和mount命令是一样的。Linux挂装CD-ROM后,会锁定CD—ROM,这样就不能用CD...
* [abc] a, b, or c (simple class) [abc] a, b, 或 c (简单字符串) * [^abc] Any character except a, b, or c (negation) [^abc] 除了 a, b, 或 c 之外的任意字符(否定) * [a-zA-Z] a ...
“字符串”表示指定用来匹配的字符串,该字符串必须加单引号或双引号。 通配符: % 任意字符 [sql] view plain copy select * from STUDENT where STU_NAME LIKE '%王'; 表示匹配任何以王结尾的 [sql] view ...
取n到m条记录.txt 合并字符串.txt 多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt 嵌套游标的使用.txt 拷贝表格.txt 排序.txt 断开并更改数据库名称....
2023年第十四届蓝桥杯大赛软件类省赛C&C++研究生组真题(包含代码&完整题解) C题-翻转 贪心 如果 S 中存在子串 101 或者 010,就可以将其分别变为 111 和 000,操作可以无限重复。...J题-反异或 01 串 字符串-回文串
要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。 三、 文本编辑器(10) 要求:(1)编辑文本; ...
要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。 三、 文本编辑器(10) 要求:(1)编辑文本; ...