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;
	}
}
(0)

相关推荐

  • Java实现双色球抽奖随机算法示例

    第一次写技术博客,写一下以前写的一个双色球抽奖随机算法. 原理如下: 1首先初始化一个待抽奖的数组nums,数组的长度k 2. 随机一个1-k之间的随机数,得到nums[k],这样得到第一个抽奖号,nums中剔除该号码,k--. 3. 重复步骤2,直到得到全部中奖号码 class myLuck { private int mTarget; List<Integer> mNums = new ArrayList<Integer>(); //摇奖池 ///从多少个数中产生多少个数 //

  • javascript 双色球对奖器

    function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.hre

  • JavaScript生成福利彩票双色球号码

    福利彩票的双色球号码是由6个红球号码和1个篮球号码组成的,其中,6个红球号码是从01到33中随机抽出的6个数字,1个篮球号码是从01到16中随机抽出的1个数字.6个红球号码通常按照从小到大的顺序排列.下面是JavaScript中生成一注双色球号码的方法,供大家参考! var redBall = new Array(); var redLen = redBall.length; while(redLen<6){ var ball = ranNumber(1,33); var flag = true

  • 微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]. 最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围的整数,再加上min就是红包的钱数. 这个算法虽然简单,但是有一个弊端:最后生成的红包可能都是min钱数的.也就是说可能最后的红包都是0.01元的. 另

  • 用php随机生成福彩双色球号码的2种方法

    不瞒您说,俺也是个双色球爱好者,经常买,但迟迟没有中过一等奖,哈哈.这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考.新的一年,祝大家中大奖,发大财. 方法一 复制代码 代码如下: <?php/*随机生成福彩双色球号码*/$red = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33);$blue = array(1,2,3,4,5

  • php中通过数组进行高效随机抽取指定条记录的算法

    php使用数组array_rand()函数进行高效随机抽取指定条数的记录,可以随机抽取数据库中的记录,适合进行随机展示和抽奖程序. 该算法主要是利用php的array_rand()函数,下面看一下array_rand()函数的主要功能: array_rand-从数组中随机取出一个或多个单元 mixed array_rand(array $input[,int $num_req] ) array_rand()在你想从数组中取出一个或多个随机的单元时相当有用.它接受input作为输入数组和一个可选的

  • 微信红包随机生成算法php版

    想了想,自己写写php版的微信红包随机生成算法,能不能实现类似的功能(其实也不敢说是算法). // $bonus_total 红包总金额 // $bonus_count 红包个数 // $bonus_type 红包类型 1=拼手气红包 0=普通红包 function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){ $bonus_items = array(); // 将要瓜分的结果 $bonus_balance = $bonus

  • C#实现简单的双色球抽取中奖号码代码

    废话不多说,直接给大家贴代码,我我就是这么狠... 关键代码如下所示: int[] ss = new int[6]; Random s = new Random(); Console.WriteLine("双色球随机:"); for (int i = 0; i < 6; i++) { bool b = true; int a = s.Next(1, 34); for (int j = 0; j < i; j++) { if (a == ss[j]) { b = false;

  • php实现的双色球算法示例

    本文实例讲述了php实现的双色球算法.分享给大家供大家参考,具体如下: <?php function DoubleBall(){ $sysBlueball = mt_rand(1,16); $sysRedball = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); $result = array(); for($i=0; $i<6; $i++) {

  • 适用于抽奖程序、随机广告的PHP概率算法实例

    那么我们在程序里必然会设计到算法,即按照一定的概率让用户获得奖品.先来看两个概率算法函数. 算法一 复制代码 代码如下: /** * 全概率计算 * * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4) * @return string 返回上面数组的key */function random($ps){    static $arr = array();    $key = md5(serialize($ps)); if (!isset

随机推荐