2017-09-03 81 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,但它仍然是一个胜利的组合。这就是我所看到的。 –

相关问题