`

中奖概率计算

    博客分类:
  • J2SE
阅读更多
转载:http://blog.csdn.net/chpublish1012

做移动的项目,有个需求,做个摇奖的活动!其中中奖的计算比较恶心,用户要改动各个奖项的中奖概率,而且每天的奖项有个数限制。一二三四五六等奖,概率不通,怎么算一个用户参与了中没中将呢?苦思了一下,可以用Random类的 nextInt(int x)方法产生一个范围内的随机数,产生到那个区间就是几等奖了,中奖区间的产生是动态的。贴出源代码,仅供参考!

package Mzone;

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

public class Mzone {

    /**
    * CopyRright(c)2009-04: 
    * Project: 
    * Module ID: 
    * Comments: 概率计算
    * JDK version used: <JDK1.4>
    * Author:ch
    * Create Date:2009-04-20
    * Modified By: 
    * Modified Date: 
    * Why & What is modified 
    * Version: 1.0
    */ 
    static Random r = new Random();
    
    public static void main(String[] args) {
        
        //各个奖项的中奖概率的分母
        Integer _5m = new Integer(5);
        Integer _500m = new Integer(30);
        Integer _ipod = new Integer(500);
        Integer _phone = new Integer(1000);
        Integer _notebook = new Integer(1500);
        Integer _jay = new Integer(50);
        
        ArrayList list = new ArrayList();
        
        if(_5m.intValue()!=0)
            list.add(_5m);
        if(_500m.intValue()!=0)
            list.add(_500m);
        if(_ipod.intValue()!=0)
            list.add(_ipod);
        if(_phone.intValue()!=0)
            list.add(_phone);
        if(_notebook.intValue()!=0)
            list.add(_notebook);
        if(_jay.intValue()!=0)
            list.add(_jay);
        
        //计算最小公倍数
        int common = getN(list);
        System.out.println("最小公倍数:"+common);
        
        int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;int f = 0;int g = 0;

        int first = 0;int second = 0;int third = 0;int four = 0;int fifth = 0;int sixth = 0;
        
        if(_5m.intValue()!=0){
            first = common/_5m.intValue();
        }
        if(_500m.intValue()!=0){
            second = first + (common/_500m.intValue());
        }else second = first;
        if(_ipod.intValue()!=0){
            third =  second + (common/_ipod.intValue());
        }else third = second;
        if(_phone.intValue()!=0){
            four =   third + (common/_phone.intValue());
        }else four = third;
        if(_notebook.intValue()!=0){
            fifth =  four + (common/_notebook.intValue());
        }else fifth = four;
        if(_jay.intValue()!=0){
            sixth =  fifth + (common/_jay.intValue());
        }else sixth = fifth;
            
        int times = 30000;//循环次数
        
        for(int i = 0;i < times; i++){
            int ri = getRandom(common);//产生随机数
            
            if(ri >= 0 && ri < first){
                a++;
            }else if(ri >= first && ri < second){
                b++;
            }else if(ri >= second && ri < third){
                c++;
            }else if(ri >= third && ri < four){
                d++;
            }else if(ri >= four && ri < fifth){
                e++;
            }else if(ri >= fifth && ri < sixth){
                f++;
            }else{
                g++;
            }
        }
        
        System.out.println("5m值:" + a + " 500m值:" + b + " ipodMP3:" + c + " 手机:" + d + " 笔记本电脑:" + e + " 演唱会门票:" + f + " 谢谢参与:" + g);
    }
    
    /**
     * 求最大公约数
    */
    public static int gcd(int m, int n){
        while (true){
            if ((m = m % n) == 0)
            return n;
            if ((n = n % m) == 0)
            return m;
        }
    }
    
    /**
    * 求最小公倍数
    */
    public static int gys(int z, int y){
        int t = 0;
        int c = 0;
        c = gcd(z,y);
        t = z * y / c;
        
        return t;
    }
    
    /**
     * 求几个数的最小公倍数
    */
    public static int getN(ArrayList list){
        
        int t = 1;
        
        for(int i = 0;i<list.size();i++){
            Integer temp = (Integer)list.get(i);
            t = gys(t,temp.intValue());
        }
        return t; 
    }
    
    /**
     * 产生随机数
    */
    public static int getRandom(int y){
        int result = r.nextInt(y);
        
        return result;
    }
    
}



分享到:
评论

相关推荐

    不同中奖概率产生中奖人

    在IT行业中,设计一个抽奖系统是一项常见的任务,它涉及到概率计算和随机数生成等核心概念。在这个场景下,"不同中奖概率产生中奖人"的主题意味着我们需要为每个参与者分配一个特定的中奖概率,然后根据这些概率来...

    通用抽奖算法存储过程(适用九宫格、大转盘算法)

    此资源包括抽奖相关所有的配置,中奖概率配置、奖品表、抽奖记录表和通用存储过程算法。 可以指定抽多少次以后在按照正常概率来计算,中奖个数,如果奖品全部被抽完就永远抽不中,中奖率和中奖最大范围有关,数字越...

    android控制中奖概率代码

    总的来说,创建一个“android控制中奖概率代码”项目涉及到Android UI设计、动画编程、概率计算和事件处理等多个方面,是Android开发中的一个综合性实践。通过这样的项目,开发者不仅可以提升技能,还能为用户提供...

    彩票概率计算app(源码+部署说明+系统介绍+源码解释).zip

    例如,可以输入彩票号码、奖项等信息,系统会自动计算出中奖概率,并给出相应的提示。同时,该应用程序还支持历史开奖记录查询等功能,帮助用户更好地了解彩票开奖情况。 总之,彩票概率计算app是一款功能丰富、...

    中科大概率统计习题集

    8. **变种彩票游戏的中奖概率计算**: - 当每张彩票只填两个不重复的号码时,中奖的概率计算相对简单。可以利用组合公式计算总的组合数和符合条件的组合数,然后计算概率。 - 如果每张彩票可以填三个不同的号码,...

    九宫格抽奖,转盘抽奖打包下载,可调中奖率

    2. JavaScript文件:实现抽奖逻辑,包括用户交互处理、动画效果、中奖概率计算等。 3. CSS文件:定义样式,使界面看起来美观且符合设计需求。 4. 图片资源:如转盘背景、九宫格图片、奖项图标等。 5. 可能还会有JSON...

    彩票概率计算app.zip

    《彩票概率计算APP项目解析》 彩票概率计算APP是一款基于Android平台的应用程序,旨在帮助用户理解和分析彩票中奖的概率。这个项目的源码是为毕业生设计的,为的是让学生们能够实际操作并理解移动应用开发的过程,...

    彩票基本功能实现

    例如,双色球的中奖概率计算需要考虑红色球和蓝色球的组合方式,以及每种组合的中奖条件。这可能需要编写函数来完成概率的动态计算,以便实时更新中奖概率。 接着,**数据库设计**是必不可少的。彩票系统需要存储...

    彩票方案的数学模型

    本文给出 “传统型”和“乐透型”彩票各奖项中奖概率计算通式并计算了各方案每种奖项奖额的期望。考虑一、二、三等奖的金额、中一等奖的概率、中二、三等奖的总概率、中四至七等奖的总概率六个方面,根据线性加权和...

    基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法

    文章还提到了基于Java语言实现中奖概率计算的方法。在Java实现中,使用Random类的nextInt(int bound)方法,可以通过产生一个随机整数来判断用户抽中哪个奖项。因为Java的nextInt方法可以指定生成随机数的上限,所以...

    C#概率算法

    这可能意味着原版算法可能存在均匀性问题,或者需要调整以适应更复杂的业务需求,如动态调整中奖概率、多级奖项结构等。改进可能包括了使用更精确的随机数生成器(如Mersenne Twister)、概率权重的平滑处理,或者...

    161029-PHP中奖概率算法

    为了更精确地模拟概率,`v`的总和(基数)应该越大越好,因为它可以提高概率计算的精度。例如,如果基数是10000,而平板电脑的`v`值为1,那么中奖概率就只有万分之一。 以下是如何使用`$prize_arr`和`get_rand()`...

    高中数学概率大题(经典一).doc

    例如,抽奖中的中奖概率计算。 - 贝叶斯定理:在已知一些事件发生的情况下,计算另一事件发生的条件概率。 4. **概率分布与期望** - 二项分布:如果一个随机变量X服从n次独立的伯努利试验,每次试验成功的概率为p...

    基于ssm 的彩票概率计算app

    这个“基于SSM的彩票概率计算app”项目显然使用了这些技术来构建一个能够计算彩票中奖概率的应用。 1. **Spring框架**:Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能。在...

    zp.rar_js+php抽奖大转盘_php_php抽奖源码_soonb89_抽奖 php

    后端 PHP 则会接收到前端发送的请求,根据预设的中奖概率计算出结果,并可能通过 AJAX 回传给前端,使得用户能在不刷新页面的情况下看到抽奖结果。 【标签】中的 "js+php抽奖大转盘" 强调了这是一个结合了 ...

    T4 代码生成 Demo (抽奖程序)

    在这个“T4代码生成 Demo (抽奖程序)”中,开发者可能利用T4模板生成了抽奖程序的核心逻辑,如参与者列表的处理、随机数生成、中奖概率计算等部分。这有助于保持代码的整洁,同时提高了开发效率。通过访问博文地址...

    数学建模历年考题-2002ab车灯线光源的优化设计;彩票中的数学.zip

    1. **概率论**:彩票的中奖概率计算是基础的概率问题。每个号码的出现概率、组合的中奖概率,以及多次购买对中奖概率的影响等,都可以用概率论来分析。 2. **随机过程**:如果考虑连续购买彩票,那么可以引入随机...

    数学(必修4)苏教版概率检测题[下学期] 江苏教育版[精选].doc

    2. 中奖概率计算:总共有100张对奖券,其中有1张头等奖和5张二等奖,所以中奖的券共有6张。中奖的概率是6/100。 3. 互斥事件A和B,P(A)+P(B)=P(A+B),已知P(A)=0.3,P(A+B)=0.65,解得P(B)=0.65-0.3=0.35。 4. ...

    VB编写的概率计算工具,附带双色球模拟游戏,看看你中500万的几率是多少

    《VB编程实现的概率计算与双色球模拟游戏详解》 在信息技术领域,编程语言的应用广泛且多样,其中VB(Visual Basic)以其易学易用的特点深受程序员喜爱。本篇文章将深入探讨一个基于VB编写的概率计算工具,以及其...

Global site tag (gtag.js) - Google Analytics