java算法實(shí)現(xiàn)預(yù)測(cè)雙色球中獎(jiǎng)號(hào)碼
雙色球選號(hào)規(guī)則紅球是1~33選6個(gè),藍(lán)球1~16選1個(gè)。
它有17721088種排列組合,
這個(gè)代碼實(shí)現(xiàn)了如何將一組雙色球號(hào)碼 轉(zhuǎn)換成第n個(gè)排列組合數(shù)字,
以及如何根據(jù)第n個(gè)排列組合數(shù)字生成一組雙色球號(hào)碼。
分析一下今年的中獎(jiǎng)號(hào)碼所隱含的排列組合序號(hào),也許你會(huì)找到規(guī)律,
哈哈,或許你能用它算出下一次的中獎(jiǎng)號(hào)碼,趕快試試吧!
DoubleColorBall.java
import java.util.Arrays;
public class DoubleColorBall {
/**
* 根據(jù)雙色球生成絕對(duì)序號(hào)(原理:排列組合算法)
* a b c d e f 是紅球由小到大 g是藍(lán)球
*/
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;
}
/**
* 根據(jù)絕對(duì)序號(hào)生成雙色球(原理:遍歷所有組合)
* 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++){//最多循環(huán)1107568次,即為紅球組合數(shù)
count++;
if(redIndex==count){
return Arrays.toString(new int[]{a,b,c,d,e,f,1+((int)ballIndex-1)%16});
}
}
return null;
}
/**
* 計(jì)算組合數(shù)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日開(kāi)獎(jiǎng)結(jié)果對(duì)應(yīng)序號(hào):
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日開(kāi)獎(jiǎng)結(jié)果對(duì)應(yīng)序號(hào):
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日開(kāi)獎(jiǎng)結(jié)果對(duì)應(yīng)序號(hào):
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("預(yù)測(cè)下次開(kāi)獎(jiǎng)號(hào)碼,趕快去買(mǎi)吧!");
System.out.println(getBall(System.nanoTime()));
}
}
另外附上java雙色球復(fù)式號(hào)碼,排列組合出所有單注號(hào)碼
public class Test {
/**
* 雙色球復(fù)式組合
* @param redBall 紅球數(shù)組
* @param blueBall 籃球數(shù)組
* @return 產(chǎn)生的組合個(gè)數(shù)
*/
public static int getDoubleChromosphere(Integer [] redBall,int [] blueBall){
int count = 0;//產(chǎn)生的組合個(gè)數(shù)
List<Integer> result = new LinkedList<Integer>();;//產(chǎn)生的雙色球組合
//外層循環(huán)控制籃球
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]);
//輸出組合結(jié)果
System.out.print("紅球?yàn)椋篭t");
for(int j = 0;j < result.size();j++){
if(6 == j){
System.out.println("籃球?yàn)椋篭t"+result.get(j));
break ;
}
System.out.print(result.get(j)+"\t");
}
System.out.println();
//清空redLisr,重新賦值
redList.clear();
redList.addAll(orign);
//組合數(shù)加一
count++;
}
}
return count;
}
}
- Java算法之?dāng)?shù)組冒泡排序代碼實(shí)例講解
- Java算法之串的簡(jiǎn)單處理
- Java算法實(shí)現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解
- Java算法實(shí)現(xiàn)楊輝三角的講解
- Java算法之冒泡排序?qū)嵗a
- Java算法之最長(zhǎng)公共子序列問(wèn)題(LCS)實(shí)例分析
- java算法實(shí)現(xiàn)紅黑樹(shù)完整代碼示例
- Java算法之堆排序代碼示例
- java算法之二分查找法的實(shí)例詳解
- java算法導(dǎo)論之FloydWarshall算法實(shí)現(xiàn)代碼
- Java算法之遞歸算法計(jì)算階乘
- JAVA算法起步之插入排序?qū)嵗?/a>
- JAVA算法起步之堆排序?qū)嵗?/a>
- JAVA算法起步之快速排序?qū)嵗?/a>
- 關(guān)于各種排列組合java算法實(shí)現(xiàn)方法
- Java算法之時(shí)間復(fù)雜度和空間復(fù)雜度的概念和計(jì)算
相關(guān)文章
聊聊注解@controller@service@component@repository的區(qū)別
這篇文章主要介紹了聊聊注解@controller@service@component@repository的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
IDEA修改生成jar包名字的兩種方法實(shí)現(xiàn)
本文主要介紹了IDEA修改生成jar包名字的兩種方法實(shí)現(xiàn),通過(guò)簡(jiǎn)單的步驟,您可以修改項(xiàng)目名稱(chēng)并在打包時(shí)使用新的名稱(chēng),具有一定的參考價(jià)值,感興趣的可以了解下2023-08-08
JAVA HTTP反向代理實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了JAVA HTTP反向代理實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
idea運(yùn)行tomcat報(bào)錯(cuò)找不到catalina.bat,系統(tǒng)找不到指定的文件問(wèn)題
這篇文章主要介紹了idea運(yùn)行tomcat報(bào)錯(cuò)找不到catalina.bat,系統(tǒng)找不到指定的文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-11-11
Java超詳細(xì)講解設(shè)計(jì)模式之一的工廠模式
工廠模式有 3 種不同的實(shí)現(xiàn)方式,分別是簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式,工廠模式最大的特點(diǎn)就是解耦合,本篇帶你詳細(xì)了解它2022-03-03
Java基礎(chǔ)知識(shí)之CharArrayReader流的使用
這篇文章主要介紹了Java基礎(chǔ)知識(shí)之CharArrayReader流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
spring?boot使用@Async注解解決異步多線程入庫(kù)的問(wèn)題
最近在寫(xiě)項(xiàng)目是需要添加異步操作來(lái)提高效率,所以下面這篇文章主要給大家介紹了關(guān)于spring?boot使用@Async注解解決異步多線程入庫(kù)問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05

