java算法实现预测双色球中奖号码
程序员文章站
2024-03-08 13:06:28
双色球选号规则红球是1~33选6个,蓝球1~16选1个。
它有17721088种排列组合,
这个代码实现了如何将一组双色球号码 转换成第n个排列组合数字,
以及如何根...
双色球选号规则红球是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; } }
上一篇: java 中cookie的详解及简单实例