java算法实现预测双色球中奖号码

 更新时间:2015年12月07日 10:06:43   投稿:hebedich  
这篇文章主要介绍了java算法实现预测双色球中奖号码的相关资料,需要的朋友可以参考下

双色球选号规则红球是1~33选6个,蓝球1~16选1个。
它有17721088种排列组合,
这个代码实现了如何将一组双色球号码 转换成第n个排列组合数字,
以及如何根据第n个排列组合数字生成一组双色球号码。

分析一下今年的中奖号码所隐含的排列组合序号,也许你会找到规律,
哈哈,或许你能用它算出下一次的中奖号码,赶快试试吧!

DoubleColorBall.java

import java.util.Arrays;
 
public class DoubleColorBall {
  /**
   * 根据双色球生成绝对序号(原理:排列组合算法)
   * a b c d e f 是红球由小到大 g是蓝球
   */
  public static final int getBallIndex(int a,int b,int c,int d,int e,int f,int g){
    return (comp(33,6)-comp(34-a,6)+comp(33-a,5)-comp(34-b,5)
        +comp(33-b,4)-comp(34-c,4)+comp(33-c,3)-comp(34-d,3)
        +comp(33-d,2)-comp(34-e,2)+comp(33-e,1)-comp(33-f,1))*16+g;
  }
  /**
   * 根据绝对序号生成双色球(原理:遍历所有组合)
   * a b c d e f 是红球由小到大
   */
  public static final String getBall(long ballIndex){
    if(ballIndex>17721088)ballIndex=ballIndex%17721088;
    int redIndex=(int) (ballIndex/16);
    int count=0;
    for(int a=1;a<29;a++)
    for(int b=a+1;b<30;b++)
    for(int c=b+1;c<31;c++)
    for(int d=c+1;d<32;d++)
    for(int e=d+1;e<33;e++)
    for(int f=e+1;f<34;f++){//最多循环1107568次,即为红球组合数
      count++;
      if(redIndex==count){
        return Arrays.toString(new int[]{a,b,c,d,e,f,1+((int)ballIndex-1)%16});
      }
    }
    return null;
  }
  /**
   * 计算组合数C(m,n)
   */
  public static final int comp(int m, int n)
  {
    int sum=1;
    for(int i=m;i>m-n;i--)sum=sum*i;
    for(int i=n;i>1;i--)sum=sum/i;
    return sum;
  }
  public static void main(String[] args) {
    //11月29日开奖结果对应序号:
    System.out.println(getBallIndex(6,20,28,29,30,31,12));//12964124
    System.out.println(getBall(12964124));//[6, 20, 28, 29, 30, 31, 12]
    //12月1日开奖结果对应序号:
    System.out.println(getBallIndex(3,8,19,25,27,28,2));//7353378
    System.out.println(getBall(7353378));//[3, 8, 19, 25, 27, 28, 2]
    //12月3日开奖结果对应序号:
    System.out.println(getBallIndex(13,17,19,20,22,25,11));//17009451
    System.out.println(getBall(17009451));//[13, 17, 19, 20, 22, 25, 11]
    System.out.println("预测下次开奖号码,赶快去买吧!");
    System.out.println(getBall(System.nanoTime()));
  }
}

另外附上java双色球复式号码,排列组合出所有单注号码

public class Test {

	/**
	* 双色球复式组合
	* @param redBall	红球数组
	* @param blueBall	篮球数组
	* @return	产生的组合个数
	*/
	public static int getDoubleChromosphere(Integer [] redBall,int [] blueBall){
		
		int count = 0;//产生的组合个数
		
		List<Integer> result = new LinkedList<Integer>();;//产生的双色球组合
		
		//外层循环控制篮球
		for(int i = 0;i < blueBall.length;i++){
			
			//控制红球
			List<Integer> redList = new LinkedList<Integer>();
			for(Integer j : redBall){
				redList.add(j);
			}
			List<Integer> orign = new LinkedList<Integer>();
			orign.addAll(redList);
			
			for(int k = 0;k < redList.size();k++){
				redList.remove(k);
				result = redList;
				
				//最后篮球的赋值
				result.add(blueBall[i]);
				
				//输出组合结果
				System.out.print("红球为:\t");
				for(int j = 0;j < result.size();j++){
					if(6 == j){
						System.out.println("篮球为:\t"+result.get(j));
						break ;
					}
					System.out.print(result.get(j)+"\t");
				}
				System.out.println();
				
				//清空redLisr,重新赋值
				redList.clear();
				redList.addAll(orign);
				
				//组合数加一
				count++;
			}
		}
		return count;
	}
}

相关文章

  • 聊聊注解@controller@service@component@repository的区别

    聊聊注解@controller@service@component@repository的区别

    这篇文章主要介绍了聊聊注解@controller@service@component@repository的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • IDEA修改生成jar包名字的两种方法实现

    IDEA修改生成jar包名字的两种方法实现

    本文主要介绍了IDEA修改生成jar包名字的两种方法实现,通过简单的步骤,您可以修改项目名称并在打包时使用新的名称,具有一定的参考价值,感兴趣的可以了解下
    2023-08-08
  • JAVA HTTP反向代理实现过程详解

    JAVA HTTP反向代理实现过程详解

    这篇文章主要介绍了JAVA HTTP反向代理实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Spring Boot2.x如何自定义Endpoint

    Spring Boot2.x如何自定义Endpoint

    这篇文章主要介绍了Spring Boot2.x如何自定义Endpoint,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • springboot如何配置Filter过滤器

    springboot如何配置Filter过滤器

    这篇文章主要介绍了springboot如何配置Filter过滤器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • idea运行tomcat报错找不到catalina.bat,系统找不到指定的文件问题

    idea运行tomcat报错找不到catalina.bat,系统找不到指定的文件问题

    这篇文章主要介绍了idea运行tomcat报错找不到catalina.bat,系统找不到指定的文件问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • Java超详细讲解设计模式之一的工厂模式

    Java超详细讲解设计模式之一的工厂模式

    工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式,工厂模式最大的特点就是解耦合,本篇带你详细了解它
    2022-03-03
  • Mybatis-Plus中的条件参数使用

    Mybatis-Plus中的条件参数使用

    这篇文章主要介绍了Mybatis-Plus中的条件参数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java基础知识之CharArrayReader流的使用

    Java基础知识之CharArrayReader流的使用

    这篇文章主要介绍了Java基础知识之CharArrayReader流的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • spring boot使用@Async注解解决异步多线程入库的问题

    spring boot使用@Async注解解决异步多线程入库的问题

    最近在写项目是需要添加异步操作来提高效率,所以下面这篇文章主要给大家介绍了关于spring boot使用@Async注解解决异步多线程入库问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05

最新评论