Untitled

 avatar
unknown
csharp
8 months ago
1.5 kB
3
Indexable
namespace Test;

internal static class Program
{
    private static void Main(string[] _)
    {
        const int NUMBER_OF_TRIES = 10000000;

        int sumTwoHeads = 0;
        int sumHeadTail = 0;
        
        for (int i = 0; i < NUMBER_OF_TRIES; i++)
        {
            sumTwoHeads += Solve((firstResult, secondResult) => firstResult is FlipResult.Heads && secondResult is FlipResult.Heads);
            sumHeadTail += Solve((firstResult, secondResult) => firstResult is FlipResult.Heads && secondResult is FlipResult.Tails);
        }

        double expectationTwoHeads = (float)sumTwoHeads / NUMBER_OF_TRIES;
        double expectationHeadTail = (float)sumHeadTail / NUMBER_OF_TRIES;
        
        Console.WriteLine("В среднем для орёл-орёл: " + expectationTwoHeads);
        Console.WriteLine("В среднем для орёл-решка: " + expectationHeadTail);
    }

    private static int Solve(Func<FlipResult?, FlipResult, bool> predicate)
    {
        Random random = new Random();
        
        int counter = 0;
        FlipResult? previousResult = null;
            
        while (true)
        {
            FlipResult result = (FlipResult)(random.Next() % 2);
            counter++;

            if (predicate(previousResult, result))
            {
                break;
            }

            previousResult = result;
        }

        return counter;
    }
}

internal enum FlipResult
{
    Heads = 0,
    Tails = 1
}
Editor is loading...