Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双倍博弈模拟_C#_Algorithm_Statistics_Simulation_Probability - Fatal编程技术网

C# 双倍博弈模拟

C# 双倍博弈模拟,c#,algorithm,statistics,simulation,probability,C#,Algorithm,Statistics,Simulation,Probability,我想知道这个模拟器是否能正常工作,因为我不认为这些是合乎逻辑的答案,但也不能捕捉错误 我已经为下面的游戏编写了一个模拟器(给定一副牌和1分),以找到最佳策略(经销商的最高牌数是多少) 模拟显示了选择每张最大牌的赢系数。它显示了这些对我来说非常可疑的数字。我希望它增长到1.5到7,然后回到1 (第一次赢/模拟次数,第二次最高卡牌经销商可以为您继续游戏) 以下是C#代码: 使用系统; 命名空间代码部队 { 班级计划 { 静态int[]k=新int[54]; 静态随机兰德=新随机(); 静态长倍频(整

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

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

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

(第一次赢/模拟次数,第二次最高卡牌经销商可以为您继续游戏)

以下是C#代码:

使用系统;
命名空间代码部队
{
班级计划
{
静态int[]k=新int[54];
静态随机兰德=新随机();
静态长倍频(整数i,长f)
{
int d=下一个随机数(52);
如果(k[d]>i)返回f;
int ch=d;
而(ch==d)ch=rand.Next(54);
如果(k[d]>k[ch])返回0;
如果(k[d]==k[ch])返回倍频(i,f);
返回倍增(i,f*2);
}
静态void Main(字符串[]参数)
{
对于(inti=0;i<54;i++)k[i]=i/4;
对于(int i=-1;i<13;i++)
{
长和=0;
对于(int j=0;j<1e7;j++)
{
总和+=加倍(i,1);
}
控制台写入线(sum/1.0e7+“”+i);
}
}
}
}

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

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

您实现递归的方式似乎也会在每次玩游戏后隐式地替换牌组中的牌,而不是在牌组中玩


当我用另一种语言独立实现时,我得到了类似的结果。在我看来,你的直觉是错误的。

那么问题是什么呢?抱歉,忘了补充,我想知道这个模拟器是否工作正常。你是说“选择”(你选择的牌)还是“抽”(随机分配的牌)?我是说你随机拿牌,你不知道你得到了什么。
 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 -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
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);
        }
    }
}