2010-07-13 127 views
1

好了,所以我真的很無聊,並決定做一個樂透計算器類型的事情(是的,我知道,我很傷心!)的Java,彩票calculuator

無論如何,我想知道是否有一個Java庫方法/用於制定排列/組合的類。我想要生成所有可能的數字集,從1 - 49有6個數字,沒有在其中重複

如果這不是作爲預先寫好的方法可用,什麼是我最好的方法寫我自己的?

謝謝

+0

你不會住在德國,是嗎? ;) – 2010-07-13 10:24:40

+0

不,英格蘭!怎麼會? – Ricki 2010-07-13 10:26:27

+0

德國彩票有1 - 49個數字,我認爲..但也有其他國家... – RoflcoptrException 2010-07-13 10:28:20

回答

0

谷歌的 「排列Java」 的發現this

玩得開心!

+0

嗯,玩得開心,似乎它可能有雙重含義;) – Ricki 2010-07-13 10:30:58

+0

沒有冒犯的意圖;你表示你這樣做是因爲你很無聊,即「爲了好玩」。就我個人而言,我覺得擁有完整的排列列表與不擁有它一樣有價值,但對每一個他自己! – 2010-07-13 10:43:53

2

這是我的第二個答案。這是一個愚蠢的,但簡單的方法來編碼這個問題(在Java中):

for (int i1=1; i1<45; i1++) { 
    for (int i2=i1+1; i2<46; i2++) { 
     for (int i3=i2+1; i3<47; i3++) { 
     for (int i4=i3+1; i4<48; i4++) { 
      for (int i5=i4+1; i5<49; i5++) { 
       for (int i6=i5+1; i6<50; i6++) { 
        System.out.format("%d %d %d %d %d %d\n", i1, i2, i3, i4, i5, i6); 
}}}}}} 
0

如果你是爲了好玩這樣做,你應該不是從頭開始做呢?

富有想象力的代碼加分?看起來是嘗試遞歸的理想機會。

想到

getPermitations(長度) { 結果=新向量 TMP = getPermitations(lenght-1)

爲(I = 0 => 9) { 爲(字符串S: tmp) { result.add(i + tmp); }}

}

是的,我知道這是不工作的代碼,其中在複製別人的樂趣其他工作代碼?

然後發揮優化它的額外點。

+0

或者你可以寫一些東西來實際構建完整的概率樹,爲每一種可能性創建一個新的對象。我想知道你是否先用盡了記憶! – Jon 2010-07-13 11:14:27

3

粗略估計:

49 * 48 * 47 * 46 * 45 * 44 = 10.068.347.520 

這是一個列表的包含所有可能的組合長度。請注意,您不能使用ArrayList,因爲這由陣列支持,並且陣列的最大大小限制爲Integer.MAX_VALUE。即使您使用byte陣列來存儲十個十億組合,你應該像這樣開頭的JVM:

java -Xmx250G my.little.LotteryGenerator 

(假設你在船上足夠的內存)

1

很抱歉的意大利麪條代碼和可怕的命名變量(我住了,直到凌晨3點一晚)用Java編寫自己的抽獎程序,但在這裏,雅去

public static void LottoNumbers() 
     { 

      int zero=0; 
int one=0; 
int two=0; 
int three=0; 
int four=0; 
int five=0; 
int six=0; 
int bonus = 0; 
int bonusball=0; 
      ArrayList myNumbers = new ArrayList(); 
      Random random2 = new Random(); 

      ArrayList ResultsList = new ArrayList<results>(); 
      ArrayList numberList = new ArrayList(); 

      for (int outer = 0; outer < 140000001; outer++) 
      { 
       myNumbers.clear(); 
       for (int i = 1; i < 7; i++) 
       { 
        boolean a = true; 
        while(a) 
        { 
        int r = random2.nextInt(); 
        if (!myNumbers.contains(r)) { 
         myNumbers.add(random2.nextInt(49) +1); 
         a = false; 
        } 
        } 
       } 
       numberList.clear(); 
       for (int i = 1; i < 7; i++) 
       { 
        boolean a = true; 
        while (a) 
        { 


         Random random = new Random(); 
         int r = random.nextInt(49) +1; 
         if (!numberList.contains(r)) 
         { 
          numberList.add(r); 
          a = false; 
         } 
        } 
       } 
       Random random = new Random(); 
       boolean b = true; 
       while(b) 
       { 
       int bb = random.nextInt(49) +1; 
       if (!numberList.contains(bb)) 
       { 
        bonusball = bb; 
        b = false; 
       } 
       } 

       int matches = 0; 
       for (int u =0; u<numberList.size(); u++) 
       { 
        if (myNumbers.contains(numberList.get(u))) 
        { 
         matches++; 
        } 
       } 
       if (matches == 0) 
         zero++; 
        if (matches == 1) 
         one++; 
        if (matches == 2) 
         two++; 
        if (matches == 3) 
         three++; 
        if (matches == 4) 
         four++; 
        if (matches == 5) 
         five++; 
        if (matches== 5 && myNumbers.contains(bonusball)) 
         bonus++; 
        if (matches == 6) { 
         six++; 

          System.out.println("Jackpot! " + numberList.get(0) 
            +"," + numberList.get(1) 
            +"," + numberList.get(2) 
            +"," + numberList.get(3) 
            +"," + numberList.get(4) 
            +"," + numberList.get(5)); 
        } 


if (outer%500000==0) { 
         System.out.println("none: " + zero + " one: " + one + " two: " + two + " three: " + three + " four: " + four + 
         " five: " + five + " 5+bonus: " + bonus + " six: " + six + " total: " + outer); 
} 

我最初的理論是反對一組由我自己選擇6個號碼的運行6個隨機數。但我發現隨機數發生器有點不可靠,1,2,3,4,5,6會贏得一百萬,有時甚至更多!但是我隨後決定隨機生成我的數字,我發現的結果非常準確,至少在每14,000,000次迭代大概出現一次獲勝(基於英國)的6組匹配數字。

我對每個組合都應該出現在1400萬美元中的想法很感興趣,並且想要做1.4億的抽獎,並且看看哪些數字最多。當我意識到將要存儲所有這些數據的頭痛時,我放棄了。所以我只是卡在一些打印行中輸出總計(即5個匹配)和任何發生的困境。可能幫我在這個週末挑幾個數字!

在任何人火災的任何鏡頭,我是一個新的和熱情的程序員,知道這是一個有點亂,但它只是爲了好玩:)

編輯:節目剛完成其140millionth循環,並且有10個困境!

+0

現在,如果只有你能把它綁成一個真正的彩票,你將是一個非常有錢的人;) – Leigh 2012-02-23 14:40:34