2017-08-10 2 views
0

Je voudrais savoir si ce simulateur fonctionne comme il se doit car je ne pense pas que ce soit une réponse logique, mais il ne peut pas non plus capturer une erreur.Simulation de jeu en doublon

J'ai écrit un simulateur pour le jeu suivant (Étant donné un jeu de cartes et 1 point) pour trouver la stratégie la plus optimale (ce qui est les concessionnaires plus haute carte continuer jeu)

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 

Les spectacles de simulation gagnent coefficient pour choisir chaque carte MAX à jouer.Il montre ces chiffres qui est très douteux pour moi.Je m'attendais à ce qu'il passe à 1,5 jusqu'à 7 et puis revenir à 1.

(Premier gagnant/nombre de simulations, Second- Max revendeur de carte peut obtenir pour vous de continuer le jeu)

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 

est ici code 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); 
     } 
    } 
} 

}

+2

Alors, quelle est la question ou le problème? –

+0

Désolé d'ajouter, je voudrais savoir si ce simulateur fonctionne bien – luka25

+0

Voulez-vous dire "choisir" (où vous choisissez la carte) ou "dessiner" (où il est assigné au hasard)? –

Répondre

1

Je ne suis pas un programmeur C#, mais il semble que votre approche de base est la plupart du temps correct. Je recommanderais d'utiliser une boucle plutôt que la récursivité.

Votre description de problème est vague concernant la valeur des jokers et si le revendeur rejette les jokers quand dessiné ou par magie ne les dessine pas — vous semblez être parti pour ce dernier si je lis votre code correctement.

Il semble également que la façon dont vous avez implémenté la récursivité remplace implicitement les cartes dans le jeu après chaque partie du jeu plutôt que de jouer à travers le jeu. Lorsque j'ai mis en œuvre ceci indépendamment dans une autre langue, j'ai obtenu des résultats comparables. On dirait que ton intuition est fausse.

+0

Merci, j'ai aussi compris que c'était correct. – luka25