算法分析:
计算双色球复式(单式也按复式计算,胆拖可先拆成复式来计算)的算法就是一个简单的排列组合算法。
例如:
选了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 |
● | ● | |||
● |