2017-09-03 62 views
2

我一直在研究老虎機的代碼,我有卷軸輸入,我編碼了所有可能發生的不同組合。我將它輸出到一個文件,並確定一切都在那裏。現在我需要以某種方式掃描所有的組合,並根據支付規則(2x,3x和5x相同的符號)和規則,如果2勝是有前。 aabbb只有支付較高的費用纔會支付,併爲所有支付條件制定計數器。需要弄清楚如何掃描槽組合

這是我到目前爲止有:

#include <stdio.h> 

int main() { 
    freopen("C:\\tmp\\output.txt", "w", stdout); 
    char reel1[37] = { 'A', '1', 'W', 'Q', '9', 'L', '1', 'J', 'H', 'Q', '9', 'W', '1', 'A', 'M', 'K', 'Q', 'L', 'A', '9', '1', 'M', 'K', 'Q', 'H', '9', 'A', 'Q', 'K', 'T', '9', 'J', 'W', '9', '1', 'L', '9' }; 
    char reel2[36] = { 'A', 'K', 'L', '1', '9', 'M', 'J', '1', 'K', 'M', 'Q', '9', 'T', 'A', '1', 'Q', 'W', 'K', '9', 'L', 'J', '1', 'Q', 'L', 'K', 'J', 'W', 'A', '9', 'K', 'H', 'Q', '1', 'K', 'Q', '1' }; 
    char reel3[35] = { 'J', 'K', '9', 'A', '1', 'Q', 'L', '9', 'A', '1', 'T', 'J', '9', 'A', 'H', '1', 'J', '9', 'L', 'Q', '1', 'J', 'H', '9', 'K', '1', 'M', 'A', 'J', 'K', 'W', '9', '1', 'J', '1' }; 
    char reel4[32] = { 'K', 'A', 'L', 'Q', '1', 'M', 'A', 'K', 'J', 'M', 'Q', '1', 'H', 'J', 'A', 'K', 'M', '9', 'J', 'H', '1', 'Q', '9', 'J', '1', 'W', 'K', '9', 'J', 'T', '1', 'J' }; 
    char reel5[32] = { 'J', '1', 'Q', 'W', 'K', '9', 'Q', 'J', 'K', '9', '1', 'H', 'J', '9', 'A', 'M', '9', 'J', '1', '9', 'L', 'A', '9', 'J', 'L', '9', 'K', 'Q', '9', 'T', 'K', 'Q' }; 
    int a, b, c, d, e; 
    for (a = 0; a <= 36; a++) { 
     for (b = 0; b <= 35; b++) { 
      for (c = 0; c <= 34; c++) { 
       for (d = 0; d <= 31; d++) { 
        for (e = 0; e <= 31; e++) { 
         printf("%c%c%c%c%c\n", reel1[a], reel2[b], reel3[c], reel4[d], reel5[e]); 
        } 
       } 
      } 
     } 
    } 
    return 0; 
} 

我現在該如何解決呢?我知道我必須爲所有支出組合提供計數器,一旦顯示出來並且是支付中最高支付的一個,就將其迭代一次,直到我完成整個列表。但如何到那裏擊敗我。如何掃描所有組合?任何人都有建議?

+0

嵌套太多! –

+0

建議:由於數組有'37'值,所以爲(a = 0; a <37; a ++)'而不是'for(a = 0; a <= 36; a ++)'更一致。你甚至可以寫'for(a = 0; a <(int)(sizeof(reel1)/ sizeof(* reel1)); a ++)'來避免依賴硬編碼值。 – chqrlie

+0

@chqrlie謝謝,我改變了。關於硬編碼值,現在對我來說並不重要,因爲我需要做的就是一次運行一次,給我所需的東西。 –

回答

0

您的代碼確實打印了所有47,738,880個可能的插槽值組合。由於車輪有重複項目,因此會有很多重複項目,順序可能無關緊要。

這裏是你如何才能夠着手:而不是打印組合,調用與5槽值的函數,將:

  • 檢查各種獲勝組合,並保持最好的一個
  • 輸出組合以及相應的最佳勝利。

然後你就可以運行的程序和管道輸出到sort | uniq -c得到與重複刪除(計數)的列表。

您可能想要省略清單中的丟失組合。

除了打印獲獎組合外,您還可以計算總可能獲勝數(以上計算得出的所有獲勝總數)並將其除以總輸出數(37 * 36 * 35 * 32 * 32)至覈實玩家和賭場的賠率是多少。

+0

嗯,我忘了提及「所有符號支付從左到右「。這會影響你上面所說的嗎?關於重複和等?因爲即使我們說卷軸1有2個A符號,而另外4個有一個A符號,這仍然是5xA可以在屏幕上出現的兩種不同的方式。我希望你明白我的意思。 –

+0

@SanJasko:如果組合基於值的順序進行支付,則不要對值進行排序。這隻會產生更多的總體組合,但列表中仍然會有很多重複項。 – chqrlie

+0

我將如何重複?即使我擁有他們,他們仍然會被視爲贏球組合。因爲假設我有AAA99和AAA90以及AAAKJ,那三個仍然是獲勝組合。即使AAA99再次出現並且與第一次不同,因爲第四和第五次有兩個9,但它仍然是一個勝利的組合。這就是我所看到的。 –