双色球复式投注奖等计算算法

 

算法分析:

计算双色球复式(单式也按复式计算,胆拖可先拆成复式来计算)的算法就是一个简单的排列组合算法。

例如:
     选了m个红球,中了n个红球,选了k个篮球,中了j个篮球(m、n、k、j数值限制请参考上面玩法介绍)


      n个球全中的概率是从n个球中选出n个,从剩下的m-n个中选出6-n个, Cn n 有1种,result = C (m-n) (6-n)  得出结果相乘1*result
    
     n个球全中n-1个的概率是从n个球中选出n-1个,从剩下的m-n(因已经计算过全中的情况,所以要从没有猜中的球中选)个中选出6-(n-1)个, result1 = Cn (n-1) 有1种,result 2= C (m-n) (6-n-1)  得出结果相乘result1*result2

   

以此类推。

     红球得出的结果与篮球中奖情况进行排列组合(与红球类似,暂不描述),即是中奖详情。

如:

    选了8个红球1个篮球,中了4个红球一个篮球
    四个球全中的概率是从8个球中选出四个,从剩下的四个中选出俩个, c4 2 有6种,那么中四等奖(4+1)的就是六种
 
    8个中三个的情况:从4个球中选三个c 4 3 为四种,从剩下的四个中选3个的情况也是四种 中五等奖(3+1)的就是4*4种


/**   
 * @ClassName:SSQCalculateAward   
 * @Description: 计算双色球中奖情况
 */
public class SSQCalculateAward {
	
	public final static int RED = 6;
	
	public final static int BLUE = 1;
	
	public final static int MAX_BLUE = 16;
	
	public final static int MAX_RED = 20;

   /**
    * @Description: 计算双色球中奖情况
    * @param red 选中的红球个数
    * @param guessRed 猜中的红球个数
    * @param blue 选中的篮球个数
    * @param guessBlue   猜中的篮球个数
     */
   public  void calculateRed(int red,int guessRed,int blue,int guessBlue){
        //参数有效性检查
        if(red>MAX_RED||red<RED||guessRed>RED||guessRed<0||blue<BLUE||blue>MAX_BLUE||guessBlue>BLUE||guessBlue<0){
            throw new IllegalArgumentException("参数不合法");
        }
        
        int notGuessBule = blue - guessBlue;
        
        for(int i=guessRed; i>=0;i--){
            if(red-guessRed+i<6)
                break;
            int recoreds = combination(guessRed,i)*combination(red-guessRed,RED-i);
            
            if(recoreds*guessBlue!=0)
            System.out.println("红球中"+i+"个"+"篮球中"+guessBlue+"的注数是"+recoreds*guessBlue+"注");
            
            if(recoreds*notGuessBule!=0)
            System.out.println("红球中"+i+"个"+"篮球中0个的注数是"+recoreds*notGuessBule+"注");
        }
    }
    
    public  int combination(int m,int n){
        int k = 1;
        int j = 1;
        for(int i = n; i>=1;i--){
            k = k*m;
            j = j*n;
            m--;
            n--;
        }
        return k/j;
    }
    public static void main(String[] args){
        
        SSQCalculateAward ssqCalculateAward = new SSQCalculateAward();
        ssqCalculateAward.calculateRed(9, 4,5,1);
    }
}

备注双色球的游戏规则:


每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1--33中选择;蓝色球号码从1--16中选择。


复式投注:

(一)红色球号码复式:从红色球号码中选择7--20个号码,从蓝色球号码中选择1个号码,组合成多注投注号码的投注。

(二)蓝色球号码复式:从红色球号码中选择6个号码,从蓝色球号码中选择2--16个号码,组合成多注投注号码的投注。

(三)全复式:从红色球号码中选择7--20个号码,从蓝色球号码中选择2--16个号码,组合成多注投注号码的投注。


如:选择7个红球1个篮球,就属于红球复式共7注,14元。


奖 级中奖条件奖金分配说明
红色球号码蓝色球号码
一等奖●●●●●●当奖池资金低于1亿元时,奖金总额为当期高等奖奖金的70%与奖池中累积的奖金之和,单注奖金按注均分,单注最高限额封顶500万元。
当奖池资金高于1亿元(含)时,奖金总额包括两部分,一部分为当期高等奖奖金的50%与奖池中累积的奖金之和,单注奖金按注均分,单注最高限额封顶500万元;另一部分为当期高等奖奖金的20%,单注奖金按注均分,单注最高限额封顶500万元。
选6+1中6+1
二等奖●●●●●● 当期高等奖奖金的30%。选6+1中6+0
三等奖●●●●●单注奖金额固定为3000元选6+1中5+1
四等奖●●●●● 单注奖金额固定为200元选6+1中5+0或中4+1
●●●●
五等奖●●●● 单注奖金额固定为10元选6+1中4+0或中3+1
●●●
六等奖●●单注奖金额固定为5元选6+1中2+1或中1+1或中0+1
 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值