Java实现大乐透不重复数字随机号码生成方案

news2025/4/8 19:01:46

大乐透攻略Java实现(仅供参考学习)

购票方式

  • 每期最低购票数:7 张

  • 最低消费:14 元

  • 方案介绍:后区12个数中随机分成6组,且数字不重复。前区35个数随机分成7组,且数字不重复。前区需要7组才能够分完,所以最低购票数为7张。

  • 具体方案:后区随机分成的6组与前区分成的7组1对1随机搭配,还剩下1组前区缺少后区,新增后区:随机取一组数(后区数选取规则,排除大乐透开奖近三期的后区号码)

方案概率分析

前区号码分析

  • 最多5张彩票前区只中一个号码。由于采用的方案中均为不重复的数字,则7注大乐透中,前区都只中1个号码的情况有5注。

  • 4张彩票前区中1个号码以上。存在一种情况:一张彩票中2个号码,其余3张彩票各中一个号码。

  • 3张彩票前区中1个号码以上。存在一种情况:两张彩票中2个号码,剩下一张彩票中1个号码。

  • 2张彩票前区中1个号码以上。存在两种情况:一张彩票中1个号码,剩下一张彩票中4个号码。或者一个彩票中2个号码,剩下一张彩票中3个号码。

  • 1张彩票前区中5个号码。

后区号码分析

  • 最多3张彩票后区只中一个号码。原本6组最多只能2张彩票后区只中一个号码,但是为了与前区第7组搭配,故增加了一组后区,所以最多3张彩票后区中一个号码。
  • 1张彩票后区中2个号码。

前后区号码联合分析

注意:以下概率均为情况已发生时的概率。

  • 情况1:7张彩票中5张各中1个前区号码,后区7张彩票中2张各中1个后区号码。

构成1+1的概率则为:(5/7 ) * (2/7) = 10/49

  • 情况2:7张彩票中4张,后区7张彩票中2张各中1个后区号码。

构成1+1的概率则为:(3/7)*(2/7) = 6/49

构成2+1的概率则为:(1/7)*(2/7)= 2/49

  • 情况3:7张彩票中3张,后区7张彩票中2张各中1个后区号码。

构成1+1的概率则为:(1/7)*(2/7)= 2/49

构成2+1的概率则为:(2/7)*(2/7)= 4/49

  • 情况4:7张彩票中2张,后区7张彩票中2张各中1个后区号码。

构成1+1的概率则为:(1/7)*(2/7)= 2/49

构成2+1的概率则为:(1/7)*(2/7)= 2/49

构成3+1的概率则为:(1/7)*(2/7)= 4/49

构成4+1的概率则为:(1/7)*(2/7)= 4/49

  • 情况5:7张彩票中1张,后区7张彩票中1张中1个后区号码。

构成5+1的概率则为:(1/7)*(2/7)= 2/49

  • 情况6:7张彩票中5张各中1个前区号码,后区7张彩票中1张中2个后区号码。

构成1+2的概率则为:(5/7 ) * (1/7) = 5/49

  • 情况7:7张彩票中4张,后区7张彩票中1张中2个后区号码。

构成1+2的概率则为:(3/7)*(1/7) = 3/49

构成2+2的概率则为:(1/7)*(1/7)= 1/49

  • 情况8:7张彩票中3张,后区7张彩票中1张中2个后区号码。

构成1+2的概率则为:(1/7)*(1/7)= 1/49

构成2+2的概率则为:(2/7)*(1/7)= 1/49

  • 情况9:7张彩票中2张,后区7张彩票中1张中2个后区号码。

构成1+2的概率则为:(1/7)*(1/7)= 1/49

构成2+2的概率则为:(1/7)*(1/7)= 1/49

构成3+2的概率则为:(1/7)*(1/7)= 2/49

构成4+2的概率则为:(1/7)*(1/7)= 2/49

  • 情况10:7张彩票中1张,后区7张彩票中1张中2个后区号码。

构成5+2的概率则为:(1/7)*(1/7)= 1/49

Java方案实现的代码

import java.util.*;

public class Main {

    public static void main(String[] args) {
        dltPolicy();
    }

    /***
     * 取得范围内的随机数
     * @param min
     * @param max
     * @return
     */
    public static int getRandInteger(int min, int max) {
        int rt = 0;
        try {
            Random random = new Random();
            rt = random.nextInt(max - min + 1) + min;
            return rt;
        } catch (Exception e) {
            System.out.println("Get random error");
            return -1;
        }
    }


    /**
     * 方案代码
     */
    public static void dltPolicy() {
        //定义变量装7组大乐透彩票号码
        ArrayList<Integer> dltNumberArray = new ArrayList<>();
        //校验前区随机号码是否重复
        HashMap<Integer, Integer> frontArea = new HashMap<>();
        //校验后区随机号码是否重复
        HashMap<Integer, Integer> endArea = new HashMap<>();
        Integer front = getRandInteger(1, 35);
        frontArea.put(front, 0);
        dltNumberArray.add(front);
        Integer end = 0;
        for (int i = 0; i < 34; i++) {
            if ((i + 1) % 5 == 0 && i < 33) {
                for (int j = 0; j < 2; j++) {
                    end = getRandInteger(1, 12);
                    while (endArea.get(end) != null) {
                        end = getRandInteger(1, 12);
                    }
                    endArea.put(end, 0);
                    dltNumberArray.add(end);
                }
            }
            front = getRandInteger(1, 35);
            while (frontArea.get(front) != null) {
                front = getRandInteger(1, 35);
            }
            frontArea.put(front, 0);
            dltNumberArray.add(front);
            if (i == 33) {
                end = getRandInteger(1, 12);
                endArea.put(end + 12, 0);
                dltNumberArray.add(end);
                while (endArea.get(end + 12) != null) {
                    end = getRandInteger(1, 12);
                }
                dltNumberArray.add(end);
            }
        }
        //不重复数字验证 可以放开以下代码行注释
        //Collections.sort(dltNumberArray);
        //System.out.println(dltNumberArray);
        for (int i = 0; i < 7; i++) {
            List<Integer> nums = dltNumberArray.subList(i * 7, 7 * (i + 1));
            List<Integer> fronts = nums.subList(0, 5);
            List<Integer> ends = nums.subList(5, 7);
            System.out.println("前区:" + fronts + "后区:" + ends);
        }
    }
}

运行截图
在这里插入图片描述
测试不重复数字截图
运行结果:包含1-12的重复号码24个 + 13-35的不重复号码23个 + 随机1-12的两个不重复号码2个,共49个号码。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【目标检测】IoU、GIoU、DIoU、CIoU、EIoU 5大评价指标

目录 一、简介 二、IoU&#xff08;Intersection over Union&#xff09; 三、GIoU&#xff08;Generalized IoU&#xff09; 四、DIoU&#xff08;Distance-IoU&#xff09; 五、CIoU(Complete-IoU) 六、EIoU(Efficient-IoU) 七、pytorch代码实现 七、总结 一、简介 在目标检测…

即时通讯开发之如何测试实时语音通话质量

实时语音聊天开发&#xff0c;对于一般的开发者来说比较神秘&#xff0c;很多朋友不太清楚如何全面的评估一个音频引擎。很多朋友还停留在这样的初级阶段&#xff1a;把demo调通&#xff0c;找几个人喂喂喂......凭自己优异的听觉感受一下&#xff0c;整个测试过程就完成了。 但…

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程 32-Kbit serial IC bus EEPROM - 105C operation 适用于M24C32/M24C32-DRE 读取存储的从机地址为&#xff1a;0x50 读取标识页面的从机地址为&#xff1a;0x58 WC引脚接地&#xff0c;存储可以进行写操作 地址长度为16位 存…

117. 填充每个节点的下一个右侧节点指针 II

文章目录1. 背2. 题目3. 答案1. 背 这道题本来可以很简答&#xff0c;一个队列&#xff0c;存储指针和它的行数就OK了&#xff0c;但是这道题的难点在于不用额外空间复杂度。 横向看一下&#xff0c;这一行是不是就是一个链表呢&#xff1f; 多加一个变量&#xff0c;用来存储第…

C++入门教程||C++ 判断||C++ 日期 时间

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 C 编程语言提…

three.js实战 -自定义剪切器

1. 前言 这是我在github上看到大佬的一个作品&#xff0c;当时感觉很有意思&#xff0c;决定分享出来&#xff0c;不知道取这个名字是否正确&#xff0c;废话不多说看下面效果。 2.demo效果 3.需要掌握的知识 矩阵的基本运算&#xff0c;能够认是到一些基本变换用到的矩阵(…

晶圆级倒装装备及控制系统

晶圆级倒装装备主要由晶圆盘进料模块、晶圆盘工作台模块、覆晶模块、焊头模块、基板工作台模块、点胶模块、视觉模块和基板进出料模块组成&#xff0c;如图 2-2 所示。 晶圆级倒装装备控制系统结构晶圆级倒装装备的运控系统主要由工控机、运动控制卡、驱动器、反馈装置和直线电…

QA:observable and Subject

概念区别和常见的错误理解辩证&#xff1a; 通俗理解一下 1. Observable 是一条 "水管蓝图" ,每次打开水龙头&#xff0c;水流会按照设计好的路线流向终点。起点和终点一一对应。每次打开水流&#xff0c;都是新的流&#xff0c;水流之间互不影响。一次一管。 2. …

VMWare虚拟机设置CentOS7共享文件夹

1. 目录 系统版本&#xff1a;CentOS 7.9 文章目录1. 目录2. VMWare&#xff1a;虚拟机设置&#xff0c;设置共享文件夹3. 虚拟机设置&#xff1a;手动挂载共享文件夹4. 检查是否挂载成功5. (可选)创建共享文件夹的软链接(快捷方式)6. (可选)定时任务开机自动挂载2. VMWare&am…

博客文章分类导引(持续更新)

摘要&#xff1a;本文提供一篇博客目录&#xff0c;有物联网、安卓编程、硬件设计等若干主题&#xff0c;这些主题一般都是成系统的&#xff0c;可以实现从零开始做出自己的物联网系统。 文章结构如下&#xff1a; 1.物联网专栏 使用arduino编写mqtt客户端连接emqx服务器 VSC…

vue.js:组件化的实现和使用过程

什么是组件化&#xff1f; 当我们遇到复杂问题的时候&#xff1a; 任何一个人处理信息的逻辑能力都是有限的所以&#xff0c;当我们面对一个复杂的问题的时候&#xff0c;我们不可能一次性搞定处理掉一大堆内容但是我们都会有问题拆解的能力将一个复杂的问题拆解成很多小的问…

Springcloud笔记之Ribbon

Ribbon&#xff1a;负载均衡&#xff08;基于客户端&#xff09;1. 负载均衡以及Ribbon1.1 Ribbon 的概念1.2 Ribbon 的作用2. 集成Ribbon3. 使用Ribbon实现负载均衡3.1 步骤3.2 自定义规则1. 负载均衡以及Ribbon 1.1 Ribbon 的概念 Spring Cloud Ribbon 是基于Netflix Ribbo…

[附源码]计算机毕业设计JAVA智能超市导购系统

[附源码]计算机毕业设计JAVA智能超市导购系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集的音频(onRecordAudioFrame)

上篇已经说道,通过注册回调,给上层APP抛音频裸数据: 《WebRTC Native M96 SDK接口封装–注册语音观测器对象获取原始音频数据registerAudioFrameObserver》[https://dabaojian.blog.csdn.net/article/details/128218542] 此篇,就详细讲述一下,如果实现onRecordAudioFrame…

vue学习笔记(二)-vue生命周期

概念 a.又名生命周期回调函数、生命周期函数、生命周期钩子b.是什么&#xff1a;Vue在关键时刻帮我们调用的一些特殊名称的函数c.生命周期函数的名字不可更改&#xff0c;但函数的具体内容是程序员根据需求编写的d.生命周期函数中的 this 指向是vm或组件实例对象 示例代码&am…

来一场关于元宇宙可持续的灵魂辩论|BOOK DAO 内容共建 第6期 招募

小杜《元宇宙创意图谱》是 BOOK DAO 的共建书籍项目&#xff0c;12.03我们举行了虚拟时尚主题的第5次公开共建活动。本周六晚8点&#xff0c;我们将举办第6期 元宇宙可持续 专题的共建活动。BOOK DAO 以搭建产业界与用户之间的交流平台、挖掘业界最值得深入探讨研究的话题为目标…

【linux】ssh免密登录

概要 服务器免密登录实际上是基于公钥的认证&#xff0c;比如希望A服务器可以免密访问B服务器&#xff0c;则需要进行如下步骤 A服务器生成密钥对将A服务器生成的公钥分发到B服务器&#xff08;写入~/.ssh/authorized_keys&#xff09;A服务器即可免密登录B服务器 生成密钥对…

特殊类的设计(单类模式)

一.不能拷贝的类 首先要知道拷贝的场景&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 方法1&#xff1a;将这两个函数只声明&#xff0c;不定义&#xff08;防止编译器默…

【愚公系列】2022年12月 Redis数据库-Cache和Redis缓存的无缝切换使用

文章目录前言一、Cache和Redis缓存的无缝切换使用1.安装包2.服务配置3.创建控制器4.启动程序前言 Redis是分布式缓存&#xff0c;是将数据随机分配到不同服务器的&#xff0c;catch属于单机缓存&#xff0c;只能本机访问。 Redis和Cache的区别吧 Redis和cache都是将数据存放…

Nginx rewrite 详解

Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关键指令&#xff0c;根据regex (正则表达式)部分内容,重定向到replacement&#xff0c;结尾是flag标记。 基本语法: re…