代码之家  ›  专栏  ›  技术社区  ›  luka25

加倍游戏模拟

  •  0
  • luka25  · 技术社区  · 8 年前

    我想知道这个模拟器是否能正常工作,因为我认为这些都不是合乎逻辑的答案,但也不能捕捉错误。

    我已经为下面的游戏编写了一个模拟器(给定一副牌和1分),以找到最佳策略(经销商继续游戏的最高牌是什么)

     1. Dealer picks a card and shows it to you(Dealer can't pick Joker)
     2. You decide whether to play or no
     3.1. If you don't play you get current points and finish game
     3.2. If you play you pick a Card
     3.2.1. If your card is higher you get double points and go back to step 1
     3.2.2. If your and dealer's cards are equal you go back to step 1
     3.2.3. If dealer's card is higher you lose all points and finish
    

    模拟显示了选择每张最大牌的赢系数。它显示了这些对我来说非常可疑的数字。我希望它增长到1.5到7,然后回到1。

    1 -1
    1.0853817 0
    1.1872532 1
    1.3126581 2
    1.4672619 3
    1.6704736 4
    1.9485809 5
    2.2674231 6
    2.9993735 7
    3.5692085 8
    4.3581477 9
    4.0109722 10
    2.3629856 11
    0 12
    

    以下是C代码:

    using System;
    
    namespace Codeforces
    {
        class Program
        {
        static int[] k = new int[54];
    
        static Random rand = new Random();
    
        static long Doubling(int i, long f)
        {
            int d = rand.Next(52);
    
            if (k[d] > i) return f;
    
            int ch = d;
            while (ch == d) ch = rand.Next(54);
    
            if (k[d] > k[ch]) return 0;
    
            if (k[d] == k[ch]) return Doubling(i, f);
    
            return Doubling(i, f * 2);
        }
    
        static void Main(string[] args)
        {
            for (int i = 0; i < 54; i++) k[i] = i / 4;
    
            for (int i = -1; i < 13; i++)
            {
                long sum = 0;
                for (int j = 0; j < 1e7; j++)
                {
                    sum += Doubling(i, 1);
                }
    
                Console.WriteLine(sum / 1.0e7 + " " + i);
            }
        }
    }
    

    }

    1 回复  |  直到 8 年前
        1
  •  1
  •   pjs    8 年前

    我不是C程序员,但看起来你的基本方法基本上是正确的。我建议使用循环而不是递归。

    关于小丑的价值,你的问题描述很模糊,无论庄家是在画小丑时丢弃小丑,还是魔法般地不画小丑,如果我正确阅读了你的代码,你似乎选择了后者。