package BeanUtil;

import java.util.ArrayList;

import java.util.List;

import com.work.core.exception.OurException;

/**

* 统计任三出现的最多的几率的组合

*

* @author wangmingjie

* @date 2009-1-1下午01:22:19

*/

public class Copy_2_of_StatisAnyThree {

// 组合算法

// 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标

// 代表的数被选中,为0则没选中。

// 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。

// 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为

// “01”组合,同时将其左边的所有“1”全部移动到数组的最左端。

// 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得

// 到了最后一个组合。

// 例如求5中选3的组合:

// 1 1 1 0 0 //1,2,3

// 1 1 0 1 0 //1,2,4

// 1 0 1 1 0 //1,3,4

// 0 1 1 1 0 //2,3,4

// 1 1 0 0 1 //1,2,5

// 1 0 1 0 1 //1,3,5

// 0 1 1 0 1 //2,3,5

// 1 0 0 1 1 //1,4,5

// 0 1 0 1 1 //2,4,5

// 0 0 1 1 1 //3,4,5

public static void main(String[] args) {

Copy_2_of_StatisAnyThree s = new Copy_2_of_StatisAnyThree();

s.printAnyThree();

}

/**

*

*/

public void printAnyThree(){

int[] num = new int[]{1,2,3,4,5,6};

print(combine(num,3));

}

/**

* 从n个数字中选择m个数字

* @param a

* @param m

* @return

*/

public List combine(int[] a,int m){

int n = a.length;

if(m>n){

throw new OurException("错误!数组a中只有"+n+"个元素。"+m+"大于"+2+"!!!");

}

List result = new ArrayList();

int[] bs = new int[n];

for(int i=0;i

bs[i]=0;

}

//初始化

for(int i=0;i

bs[i]=1;

}

boolean flag = true;

boolean tempFlag = false;

int pos = 0;

int sum = 0;

//首先找到第一个10组合,然后变成01,同时将左边所有的1移动到数组的最左边

do{

sum = 0;

pos = 0;

tempFlag = true;

result.add(print(bs,a,m));

for(int i=0;i

if(bs[i]==1 && bs[i+1]==0 ){

bs[i]=0;

bs[i+1]=1;

pos = i;

break;

}

}

//将左边的1全部移动到数组的最左边

for(int i=0;i

if(bs[i]==1){

sum++;

}

}

for(int i=0;i

if(i

bs[i]=1;

}else{

bs[i]=0;

}

}

//检查是否所有的1都移动到了最右边

for(int i= n-m;i

if(bs[i]==0){

tempFlag = false;

break;

}

}

if(tempFlag==false){

flag = true;

}else{

flag = false;

}

}while(flag);

result.add(print(bs,a,m));

return result;

}

private int[] print(int[] bs,int[] a,int m){

int[] result = new int[m];

int pos= 0;

for(int i=0;i

if(bs[i]==1){

result[pos]=a[i];

pos++;

}

}

return result ;

}

private void print(List l){

for(int i=0;i

int[] a = (int[])l.get(i);

for(int j=0;j

System.out.print(a[j]+"/t");

}

System.out.println();

}

}

}

java 排列组合_java 高效率的排列组合算法(java实现)相关推荐

  1. java程序结构_Java 程序结构说明(学习 Java 编程语言 004)

    1. 一个简单的类 创建 FirstSample.java 文件,来编写最简单的 Java 应用程序.下面是示例代码: public class FirstSample { public static ...

  2. java怎么打开_java开不了怎么办?java怎么打开?

    我们在打开java软件的时候,总是提示打不开,这可急坏了小伙伴,软件打不开,就无法写程序了,那么接下来,我们就来给大家讲解一下java开不了的解决方法. 1.先保证正确安装了JAVA环境. 2.再打开 ...

  3. java c 速度_Java和C#运行速度对比:Java比C#快约3倍

    测试条件: Java版本: Java 8, .NET版本:v4.0, Release模式,针对x86平台优化 单线程模式. Java代码: package javatest; public class ...

  4. java标识符区分大小写_java标识符区分大小写怎么区分?Java入门教程

    在Java中,标识符的规则区分与C语言语言是极其严格的,写错程序就会爆红,下面我们就来了解一下Java中举报的标识符规则吧. 标识符指程序中用来标识某个实体的一个符号,不同环境下的标识符有不同的意义. ...

  5. java连接phpstudy_java,_java连接Oracle数据库问题,java - phpStudy

    java连接Oracle数据库问题 五月 23, 2016 11:09:27 上午 org.apache.catalina.core.StandardWrapperValve invoke 严重: S ...

  6. openjdk java字体库_java - 在Linux上为Openjdk Java定义/安装的字体在哪里

    在Ubuntu上安装了Oracle 8 jdk,在jre / lib中,它具有各种fontProperties文件以及一个包含字体的字体目录.但是,在安装OpenJdk 8时,jre / lib中的字 ...

  7. java加密框架_Java加密解密(一)Java加密体系基础

    标签: Java加密解密(一)Java加密体系基础 1. JCA(Java Cryptography Architecture) 提供基本的加密框架,如证书,数字签名,消息摘要和密钥对生成器.其主要实 ...

  8. java左右摇摆_java – 按边缘排列摇摆组件

    是否可以排列摆动组件? 组件位于单独的面板中,两者都使用流动布局.这两个面板位于使用网格布局的另一个面板中. 你可以看到有一个微妙的区别,我觉得很烦人.我知道所有的jlabels [蓝色/紫色的矩形都 ...

  9. java显示字母数字组合_Java字母加数字组合比较大小

    针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9".这种情况直接调用 ...

最新文章

  1. VisualStudioCode 中设置中文语言【图文教程】
  2. CVPR 2020 | ActBERT: 自监督多模态视频文字学习
  3. c++ 输出二进制_【位运算与状态压缩】二进制的魅力
  4. E. 存储过程(procedure)
  5. hierarchy change in CRM - step2 outbound R3AUIBASE queue
  6. 【渝粤题库】陕西师范大学291003综合英语(三)作业(高起专、高起本)
  7. [转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
  8. php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)
  9. 牛客 String II
  10. [再寄小读者之数学篇](2014-05-30 平均值不等式)
  11. windows mac linux 木马,针对Linux Windows macOS系统Adwind木马广告攻击
  12. Raki的读paper小记:A Concise Model for Multi-Criteria Chinese Word Segmentation with Transformer Encoder
  13. Air系列模块常见问题列表
  14. localhost 127.0.0.1 本机IP
  15. 后台管理系统架构成型
  16. 冰点还原精灵DeepFreeze重启后图标不见了
  17. waves系统服务器,waves服务器:插件挂多了电脑宕机了?Impact Server服务器拯救你的电脑CPU!...
  18. IIS 访问页面出现500 – 内部服务器错误的解决方案
  19. 简洁风个人主页(1) html 静态布局
  20. 因增强导致BDC录屏执行异常的梗

热门文章

  1. Michael kors OutletSales Institution 21 year’s
  2. 硕士生一字不差抄袭顶会论文投稿,北理工:严重学术不端,留校察看
  3. 解决ios微信浏览器时间不兼容的问题
  4. 从零开始java文件服务器篇:文件服务器
  5. Findbugs工具的使用
  6. C The Party and Sweets(思维 + 贪心)
  7. 计算机辅助教学常用的教学模式,计算机辅助教学的“两种模式”
  8. ptp(precision time protocol)时钟同步
  9. C++和Java应该怎么选择(转)
  10. 祝大家元旦快乐,新年快乐!