双色球算法

前言

首先说明一下,博主是没有能力预测双色球的,只是看最近支付宝、京东等客户端均有随机选彩票(双色球)的功能,想着模拟实现一下这个随机选号的算法。

之前看到有人说博主比较乐观,都是咬牙坚持的,博主也各种屌死,各种幻想,例如中了双色球一等奖开着宝马去阿里写代码,哈哈,我还是挺喜欢写代码的。(ps:真蛋疼,大论文还没写完,在这里搞神马双色球啊)


双色球随机算法思路

最近我每周也会买一注双色球,玩了2期之后,知道红球是33选6,蓝球是16选1,因此中奖的概率为:1 / (C(6, 33) × C(1, 16)) = 1 / 17721088 。好久没搞概率了,这么简单的概率题目,应该没算错。

以33选6为例子,我们的算法只需要模拟如下的过程:

  1. 初始化数组,数组内容为:[1...33]
  2. 从数组下标1到33中随机选取一个下标,例如7,则交换下标为7和当前最后一位的数(即下标为32),将下标为7的数放入结果数组中
  3. 再从数组下标1到32中随机选取一个数,交换该数和倒数第二位数的位置
  4. ......
  5. 直到6个数均选出为止

至于Rondom类大家可以用java自带的Random类即可,提供一个种子,估计客户端都是用的时间戳,这里我也用时间戳,大家还可以考虑生日神马的。


双色球随机算法

import java.util.ArrayList;
import java.util.Random;

/**
 * 双色球随机算法类
 * 
 * @author zhengyi.wzy
 * 
 */
public class DoubleBall {
    public static void main(String args[]) {
        // 获取红球
        ArrayList<Integer> redBalls = getBalls(1, 33, 6);

        // 获取蓝球
        ArrayList<Integer> buleBalls = getBalls(1, 16, 1);

        // 打印输出
        System.out.println("本期双色球中奖号码为:" + redBalls + ", " + buleBalls);
    }

    private static ArrayList<Integer> getBalls(int min, int max, int size) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        ArrayList<Integer> stores = new ArrayList<Integer>();
        for (int i = min; i <= max; i++) {
            stores.add(i);
        }

        for (int i = 0; i < size; i++) {
            int index = getRandomIndex(stores.size() - i);
            result.add(stores.get(index));
            swapNumbers(stores, index, stores.size() - i - 1);
        }

        return result;
    }

    private static int getRandomIndex(int max) {
        Random random = new Random(System.currentTimeMillis());
        return random.nextInt(max);
    }

    private static void swapNumbers(ArrayList<Integer> stores, int index, int last) {
        int tmp = stores.get(index);
        stores.set(index, stores.get(last));
        stores.set(last, tmp);
    }
}


后记

实验了几组数据,还是能够很好的保持随机性的,哈哈,其实我也就是写不进论文去,然后突然想写个双色球的随机算法,大家平时还是要靠自己的坚持努力获取别人的认可,双色球这种东西有人说是一种低智商税,我感觉可以作为生活中的小调味剂,和女友一起买一注,然后讨论一下中大奖以后的生活,还是挺美好。当然了,买完了该加班加班,该写代码继续写代码,博主继续写论文去了。

对了,我这期买的号码就是用这个算法随机算出来的:

本期双色球中奖号码为:[22, 17, 23, 4, 12, 20], [9]

大家如果用这个算法中奖了,可别忘了请我吃顿饭哈。
使用方式: 在D盘建立一个文本文件名为:shuangseqiu.txt 讲双色球红球的号码以逗号分隔放到里面,比如:(可以放入多注,不要放蓝球) 4,12,14,21,27,29 1,5,16,17,18,24 2,13,15,17,26,33 算法一:双色球杀号码 差 方法一:利用上期开奖红球号码每两个号码相减的绝对值作为下一期开奖号码杀号的选择。例如04061期开奖号码13、16、19、20、23、33,每两个号码相减的绝对值为16-13、19-13、20-13等共有15个差值,其中有相同的差值,那么04062期的杀号选择为01、03、04、06、07、10、13、14、17、20,实际杀错了一个红球01。此方法杀错号码个数一般在0-2个,但也有例外,04059期杀错6个,所以此方法要灵活运用。 算法二:双色球杀号码 和 算法三:双色球杀号码 乘积/商 乘除法 https://wenku.baidu.com/view/1dfc5612f18583d0496459cb.html?sxts=1565623827084 末尾两数相乘(相除):(乘取得数最后一位杀尾,除取三位数最后一位) 128期 开奖号 04 15 21 30 31 33 33*31=1023 129期杀3尾 129期杀3 13 23 33 对 33/31=1.06 6 6 16 26 对 https://wenku.baidu.com/view/ddf6abee856a561252d36fdd.html?sxts=1565623520317 双色球红球杀号技巧(实践经验,准确率高达90%) 末尾两数相乘(相除):(乘取得数最后一位杀尾,除取三位数最后一位) 128期 开奖号 04 15 21 30 31 33 33*31=1023 129期杀3尾 129期杀3 13 23 33?对 33/31=1.06 6 6 16 26 对 算法四:双色球选号码 乘积/商 乘除法 所谓计算法是指根据本期开奖号码,通过加减计算预测下期开奖号码的一种较为实用。 直观的选号方法。具体来说,运用计算法步聚如下: 一、将本期开奖的六个红号加起来得到一个总和。 二、让总和减去每一位开奖红号分别得到一个差数。 三、让这个差数除以每一个开奖号码,分别得到一个得数和余数。 四、舍弃余数,只考虑得数,让这个得数作参考,可选择出下期的开奖号码。 例如:“双色球”第60期开奖号码为“02、04、06、17、21、28”6个红号相加总和为78。计算方法如下 : (78-2)÷2=38……0, 下期奖号可能出现08、18或28。 (78-4)÷4=18……2, 下期奖号可能出现08、18或28。 (78-6)÷6=12……0, 下期奖号可能出现02、12、22或32。 (78-17)÷17=3……10,下期奖号可能出现03、13、23或33。 (78-21)÷21=2……15,下期奖号可能出现02、12、22或32。 (78-28)÷28=1……22,下期奖号可能同现01、11、21或31。 其中有两式得数均出现8, 必然有8尾数号开出。以上共选出08、18、28、02、12、22、32、03、13、23、33、01、11、21、31共计15个号。 01、02、03、08、11、12、13、18、21、22、23、28、31、32、33
好的,我可以为您提供一种使用Java编写的双色球算法,具体实现如下: 首先,定义一个包含所有彩球号码的数组,如下所示: int[] balls = {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}; 然后,定义一个方法来生成一组随机的6个红色彩球号码,实现代码如下: public int[] generateRedBalls() { int[] redBalls = new int[6]; int index = 0; Random random = new Random(); while (index < 6) { int ball = balls[random.nextInt(balls.length)]; boolean flag = true; for (int i = 0; i < index; i++) { if (redBalls[i] == ball) { flag = false; break; } } if (flag) { redBalls[index++] = ball; } } Arrays.sort(redBalls); return redBalls; } 最后,定义一个方法来生成一个蓝色彩球号码,实现代码如下: public int generateBlueBall() { Random random = new Random(); return balls[random.nextInt(balls.length)]; } 完整的双色球算法实现代码如下: import java.util.Arrays; import java.util.Random; public class DoubleColorBallGenerator { private int[] balls = {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}; public int[] generateRedBalls() { int[] redBalls = new int[6]; int index = 0; Random random = new Random(); while (index < 6) { int ball = balls[random.nextInt(balls.length)]; boolean flag = true; for (int i = 0; i < index; i++) { if (redBalls[i] == ball) { flag = false; break; } } if (flag) { redBalls[index++] = ball; } } Arrays.sort(redBalls); return redBalls; } public int generateBlueBall() { Random random = new Random(); return balls[random.nextInt(balls.length)]; } } 希望以上代码能够帮到您!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值