import java.io.*;
public class Comb {
public void combine(int[] list, int k, int l, int r, int n) {
if (k + l > n + 1)
return;
if (l == 0) {
for (int i = 0; i < r; i++)
System.out.print(list[i] + " ");
System.out.println();
return;
}
list[r - l] = k;
combine(list, k + 1, l - 1, r, n);
if (k + l <= n)
combine(list, k + 1, l, r, n);
}
public static void main(String[] args) throws NumberFormatException,
IOException {
Comb obj = new Comb();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input n: ");
int n = Integer.parseInt(br.readLine());
System.out.println("Please input r: ");
int r = Integer.parseInt(br.readLine());
int[] list = new int[r];
int k = 1;
int l = r;
obj.combine(list, k, l, r, n);
}
}
import java.io.*;
public class Choose {
int init[];
int end[];
int n;
int m;
BufferedReader in;
public Choose() {
in=new BufferedReader(new InputStreamReader(System.in));
n=getInput("Please enter the totle number n ( that is 1~n and n>0 ) : ");
m=getInput("Please enter the number of integers to be selected m ( 0<m<=n ) : ");
while(n<m) m=getInput("Wrong!! Attention m<=n !!\n Please enter the number of integers to be selected m ( 0<m<=n ) : ");
init=new int[n];
for(int i=1;i<=n;i++) init[i-1]=i;
end=new int[m];
}
public static void main(String arf[]) {
Choose demo=new Choose();
System.out.println("--------递 归--------");
demo.choose1(0,0);
System.out.println("--------非递归--------");
demo.choose2();
}
//递归算法--------------------------
public void choose1(int k,int l) {
if(l==m) {
for(int i=0;i<m;i++) System.out.print(end[i]+" ");
System.out.println();
}
else if(n-k==m-l) {
for(int i=0;i<m-l;i++) end[l+i]=init[k+i];
for(int i=0;i<m;i++) System.out.print(end[i]+" ");
System.out.println();
}
else {
end[l]=init[k];
choose1(k+1,l+1);
choose1(k+1,l);
}
}
//非递归算法----------------
public void choose2() {
int trace=0;
for(int i=0;i<n;) {
if(n-i==m-trace) {
for(int j=0;j<m-trace;j++) end[trace+j]=init[i+j];
for(int j=0;j<m;j++) System.out.print(end[j]+" ");
System.out.println();
if(trace==0) break;
i=end[--trace];
}
else if(trace==m) {
for(int j=0;j<m;j++) System.out.print(end[j]+" ");
System.out.println();
i=end[--trace];
}
else end[trace++]=init[i++];
}
}
//---------------------------------
public int getInput(String info) {
int temp=0;
System.out.print("\n"+info);
try {
temp=Integer.parseInt(in.readLine());
}
catch(Exception e) {
System.out.println("Wrong!! Input again!!");
return getInput(info);
}
if(temp<=0) {
System.out.println("\nWrong!! Should grater than 0 !");
return getInput("Enter again : ");
}
else return temp;
}
}
分享到:
相关推荐
所使用的算法应该是效率最高的算法,而且这两个类都只是对需要排列组合的数组的下标进行处理,所以能对任何类型的数组进行排列组合。
该资源为本人自己写的交叉组合算法代码的工具类,一共两个,搭配文章看效果更好!
文档中涵盖了有序数组合并的基本概念,包括如何将两个有序数组合并为一个,以及如何在Java中实现合并有序数组。此外,文档还包括一个逐步指南,介绍了如何在Java中实现合并有序数组,包括详细的代码示例和实现细节。...
该算法的核心在于合并两个有序数组的操作,通过比较两个数组中的元素,将它们按顺序放入一个新的数组中,从而完成合并。归并排序的时间复杂度为O(nlogn),是一种稳定的排序算法,适用于各种规模的数据集。在Java实现...
阶乘与排列组合算法!在各行各业都能用得到的,比较彩票业,以及复杂的生产环境预测等软件开发
不同的天气因素组合会产生两种后果,也就是分成2类:能进行活动或不能。我们用P表示该活动可以进行,N表示该活动无法进行。 下表描述样本集合是不同天气因素对该活动的影响。 Attribute class outlook ...
PreFixSpan算法是另一个序列模式挖掘算法,在算法的过程中不会产生候选集,给定初始前缀模式,不断的通过后缀模式中的元素转到前缀模式中,而不断的递归挖掘下去。详细介绍链接 CBA 基于关联规则分类算法。CBA算法...
这个源代码文件包名为“JAVA基于遗传算法的中药药对挖掘系统的设计与实现”,是一个专门为毕业设计或课程设计所准备的项目资源。它包含了完整的Java代码和一篇详细的论文,旨在帮助学生和研究人员了解并实践使用遗传...
药对类表示两种药物的组合,记录了它们的相互作用及适用症状。 遗传算法模块设计了Population、Chromosome、Gene等类来表示种群、染色体和基因。Population类管理着整体种群,Chromosome类表示一个染色体,包含多个...
outputMax.java 求两个数中的最大数 overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java ...
javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....
Java之词义相似度计算(语义识别、词语情感趋势、词林相似度、拼音相似度、概念相似度、字面相似度)
本文实例讲述了javascript使用递归算法求两个数字组合功能。分享给大家供大家参考,具体如下: // 12 ,3,4 两个数字组合 最后结果 应该是 // 13 // 14 // 23 // 24 // 34 // 这5种 用程序 怎么算出来 // 是求组合...
javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....
java 实现有数量不限的面值为100,50,20,10,5,1元的纸币,问要组成N(N^6)共有多少种组合方式;其中包括了爆搜的方法和动态规划的方法
javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....
javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....
在每一次的迭代中,需要改变每个粒子飞向Pbest,和飞向Gbest的速度,然后还要通过分别乘以为Pbest和Gbest而生成的两个不同的随机数来平衡这种改变。本文在综述了PSO算法及其发展过程的基础上,还提出了一种通过引入...