java算法实现预测双色球中奖号码
作者:hebedich 发布时间:2022-06-19 17:01:22
标签:java,双色球,中奖号码
双色球选号规则红球是1~33选6个,蓝球1~16选1个。
它有17721088种排列组合,
这个代码实现了如何将一组双色球号码 转换成第n个排列组合数字,
以及如何根据第n个排列组合数字生成一组双色球号码。
分析一下今年的中奖号码所隐含的排列组合序号,也许你会找到规律,
哈哈,或许你能用它算出下一次的中奖号码,赶快试试吧!
DoubleColorBall.java
import java.util.Arrays;
public class DoubleColorBall {
/**
* 根据双色球生成绝对序号(原理:排列组合算法)
* a b c d e f 是红球由小到大 g是蓝球
*/
public static final int getBallIndex(int a,int b,int c,int d,int e,int f,int g){
return (comp(33,6)-comp(34-a,6)+comp(33-a,5)-comp(34-b,5)
+comp(33-b,4)-comp(34-c,4)+comp(33-c,3)-comp(34-d,3)
+comp(33-d,2)-comp(34-e,2)+comp(33-e,1)-comp(33-f,1))*16+g;
}
/**
* 根据绝对序号生成双色球(原理:遍历所有组合)
* a b c d e f 是红球由小到大
*/
public static final String getBall(long ballIndex){
if(ballIndex>17721088)ballIndex=ballIndex%17721088;
int redIndex=(int) (ballIndex/16);
int count=0;
for(int a=1;a<29;a++)
for(int b=a+1;b<30;b++)
for(int c=b+1;c<31;c++)
for(int d=c+1;d<32;d++)
for(int e=d+1;e<33;e++)
for(int f=e+1;f<34;f++){//最多循环1107568次,即为红球组合数
count++;
if(redIndex==count){
return Arrays.toString(new int[]{a,b,c,d,e,f,1+((int)ballIndex-1)%16});
}
}
return null;
}
/**
* 计算组合数C(m,n)
*/
public static final int comp(int m, int n)
{
int sum=1;
for(int i=m;i>m-n;i--)sum=sum*i;
for(int i=n;i>1;i--)sum=sum/i;
return sum;
}
public static void main(String[] args) {
//11月29日开奖结果对应序号:
System.out.println(getBallIndex(6,20,28,29,30,31,12));//12964124
System.out.println(getBall(12964124));//[6, 20, 28, 29, 30, 31, 12]
//12月1日开奖结果对应序号:
System.out.println(getBallIndex(3,8,19,25,27,28,2));//7353378
System.out.println(getBall(7353378));//[3, 8, 19, 25, 27, 28, 2]
//12月3日开奖结果对应序号:
System.out.println(getBallIndex(13,17,19,20,22,25,11));//17009451
System.out.println(getBall(17009451));//[13, 17, 19, 20, 22, 25, 11]
System.out.println("预测下次开奖号码,赶快去买吧!");
System.out.println(getBall(System.nanoTime()));
}
}
另外附上java双色球复式号码,排列组合出所有单注号码
public class Test {
/**
* 双色球复式组合
* @param redBall红球数组
* @param blueBall篮球数组
* @return产生的组合个数
*/
public static int getDoubleChromosphere(Integer [] redBall,int [] blueBall){
int count = 0;//产生的组合个数
List<Integer> result = new LinkedList<Integer>();;//产生的双色球组合
//外层循环控制篮球
for(int i = 0;i < blueBall.length;i++){
//控制红球
List<Integer> redList = new LinkedList<Integer>();
for(Integer j : redBall){
redList.add(j);
}
List<Integer> orign = new LinkedList<Integer>();
orign.addAll(redList);
for(int k = 0;k < redList.size();k++){
redList.remove(k);
result = redList;
//最后篮球的赋值
result.add(blueBall[i]);
//输出组合结果
System.out.print("红球为:\t");
for(int j = 0;j < result.size();j++){
if(6 == j){
System.out.println("篮球为:\t"+result.get(j));
break ;
}
System.out.print(result.get(j)+"\t");
}
System.out.println();
//清空redLisr,重新赋值
redList.clear();
redList.addAll(orign);
//组合数加一
count++;
}
}
return count;
}
}


猜你喜欢
- jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的jav
- 1.基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binso
- 本文实例讲述了WinForm生成验证码图片的方法。分享给大家供大家参考,具体如下:1、创建ValidCode类:public class V
- 想必大家都知道,国内的Android应用基本都是免费的
- 前言SpringBoot引入neo4j <dependency> &nb
- 前言本文介绍了Object类以及Object类部分方法,toString方法,equals和hashCode方法(重写前和重写后的对比),g
- 目录配置创建OkHttpClient同步get请求异步get请求同步post请求异步post请求上传文件表单提交下面是官网给出的OKHTTP
- 在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将View
- 需要导入ant.jar包,apache网站(http://ant.apache.org/bindownload.cgi)下载即可。impor
- 本文实例总结了Android实现计时与倒计时的常用方法。分享给大家供大家参考,具体如下:方法一Timer与TimerTask(Java实现)
- public static class DataTableHelper { &nb
- 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchr
- LocalDateTime 是 Java 8 中日期时间 API 提供的一个类,在日期和时间的表示上提供了更加丰富和灵活的支持。LocalD
- 本文以实例形式讲述了C#单例模式(Singleton Pattern)的实现方法,分享给大家供大家参考。具体实现方法如下:一般来说,当从应用
- 背景两张表,分别是 :sys_tbl,和 sys_field,其中:sys_tbl 是系统所有表的信息,包含两个字段 :code(表名),n
- 开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。PermGen space
- 请求映射源码首先看一张请求完整流转图(这里感谢博客园上这位大神的图,博客地址我忘记了):前台发送给后台的访问请求是如何找到对应的控制器映射并
- 预览:捕捉声卡输出:实现音频可视化, 第一步就是获得音频采样, 这里我们选择使用计算机正在播放的音频作为采样源进行处理:NAudio 中,
- 本文实例讲述了C#修改IIS站点framework版本号的方法。分享给大家供大家参考。具体如下:使用ASP.NET IIS 注册工具 (As
- 【一】常见用法最原始的用法,耦合度低,但是不能统一管理。我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个