庞果网上的一道题目:打印N个字符的全排列,百度了一下。百度百科介绍如下(http://baike.baidu.com/view/1710135.htm),根据百度百科的提示,自己实现了一下,以下为源代码:
public class Combine {
public static void combine(Integer[] array) {
Integer[] res = array;
output(array);
int flag;
while (isDes(res)) {
for (int i = res.length - 1; i > 0; i--) {
if (res[i - 1] < res[i]) {
flag = i - 1;
for (int j = res.length - 1; j > flag; j--) {
if (res[j] > res[flag]) {
swap(res, j, flag);
break;
}
}
res = sort(res, i, res.length);
output(res);
break;
}
}
}
}
public static Integer[] sort(Integer[] array, int start, int end) {
for (int i = start; i < end; i++) {
for (int j = i; j < end; j++) {
if (array[i] > array[j]) {
int t = array[i];
array[i] = array[j];
array[j] = t;
}
}
}
return array;
}
public static boolean isDes(Integer[] array) {
boolean flag = false;
for (int i = 0; i < array.length - 1; i++) {
if (array[i] < array[i + 1]) {
flag = true;
break;
}
}
return flag;
}
public static Integer[] swap(Integer[] array, int a, int b) {
int t;
t = array[a];
array[a] = array[b];
array[b] = t;
return array;
}
public static void output(Integer[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
System.out.print("\r\n");
}
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 5, 6, 7};
combine(arr);
}
}
相关推荐
使用递归 :-------------输入给出正整数n,输出1到n的全排列,排列的输出顺序为字典序,每种排列占一行,数字间无空格,
C语言程序设计-求一个大于10的n位整数的后n-1位的数,并作为函数值返回;
【问题描述】输入整数N( 1 <= N ),生成从1~N所有整数的全排列。 【输入形式】输入整数N。 【输出形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行...
输入N,输出1-N全排列c语言算法,非递归算法................
输出n个整数的全排列 C++程序 数据结构 实验一
已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。 输入 第一行为M,表示测试数据组数。 接下来M行,每行包含一个测试数据。 输出 输出M行,每行为对应行的n-1位数...
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1...
if((i+j)==k-1) { temp+=(m[l-i]-48)*(n[l-j]-48); } } } v=(temp+t)%10; s[k]=v; t=(temp+t)/10; k++; } temp=0; for(i=0;i;i++) { for(j=0;j;j++) if((i+j)==k-1) { ...
这是Matlab求解0-1整数线性规划,可以参考
C语言的全排列 注意 当n>10 效率会非常低
n个元素全排列 整数n的划分 设计一个递归程序生成n个元素{r1,r2,...,rn}的全排列 编写程序,求正整数n的不同划分个数以及具体的划分。
大整数的四则运算----高质量C语言程序.doc
经典运筹学问题,采用MATLAB编程,可以解决0-1整数规划问题
实现 整数1-n的所有的排列并且打印出来
输入数据第一行包含一个整数 n(1≤n≤1000),第二行包含长度为 n-1 由U 和D 构成的 字符串。 ★结果输出: 输出由空格隔开的满足要求的全排列,如果找不到满足的全排列则输出-1。 输入示例 输出示例 7 2 1 3 5...
输出1到n的所有排列 即全排列!用回溯法做的!
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。 问题: 输入一个整数n,输出1~n中的素数,里有详细解释,有问题也欢迎留言!谢谢支持啦~
整数线性规划第1-4节新.ppt
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6...
代码 基于0-1整数规划枚举法离散型优化问题代码代码 基于0-1整数规划枚举法离散型优化问题代码代码 基于0-1整数规划枚举法离散型优化问题代码代码 基于0-1整数规划枚举法离散型优化问题代码代码 基于0-1整数规划枚举...