>백엔드 개발 >C++ >사용자 입력을 기반으로 C#에서 카드 한 벌을 여러 번 효율적으로 섞는 방법은 무엇입니까?

사용자 입력을 기반으로 C#에서 카드 한 벌을 여러 번 효율적으로 섞는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-05 03:55:38466검색

How Can I Efficiently Shuffle a Deck of Cards Multiple Times in C# Based on User Input?

C#에서 카드 섞기

카드 섞기는 카드 게임에서 무작위성을 도입하는 데 중요한 측면입니다. 이 문서에서는 C#의 카드 섞기 주제를 자세히 살펴보고 사용자 입력에 따라 덱을 반복적으로 섞어야 하는 특정 시나리오를 다룹니다.

제공된 코드에서 카드 덱을 나타내는 클래스를 정의했습니다. , 개별 카드 및 다양한 열거. 카드 섞기를 통합하려면 컬렉션의 요소를 효율적으로 무작위화하는 Fisher-Yates 섞기 알고리즘을 사용하는 것이 좋습니다.

Fisher-Yates 섞기 기능을 코드에 추가하는 방법은 다음과 같습니다.

셔플링을 위한 도우미 클래스:

라는 정적 도우미 클래스를 만듭니다. FisherYates는 셔플 알고리즘을 구현합니다.

static public class FisherYates
{
    static Random r = new Random();

    static public void Shuffle(int[] deck)
    {
        for (int n = deck.Length - 1; n > 0; --n)
        {
            int k = r.Next(n+1);
            int temp = deck[n];
            deck[n] = deck[k];
            deck[k] = temp;
        }
    }
}

덱에 셔플 적용:

Program.cs 클래스에서 사용자가 원하는 셔플 수를 얻습니다. FisherYates 셔플 방법을 활용하여 데크를 셔플합니다.

int numOfShuffles = int.Parse(Console.ReadLine());
for (int i = 0; i < numOfShuffles; i++)
{
    FisherYates.Shuffle(mydeck.Cards);
}

섞은 카드 표시:

섞은 후 업데이트된 섞인 카드 덱을 표시할 수 있습니다.

foreach (Card c in mydeck.Cards)
{
    Console.WriteLine(c);
}

Fisher-Yates 셔플 알고리즘을 활용함으로써 프로그램은 이제 사용자가 지정한 만큼 카드 덱을 셔플할 수 있습니다. 결과로 섞인 덱을 표시합니다.

위 내용은 사용자 입력을 기반으로 C#에서 카드 한 벌을 여러 번 효율적으로 섞는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.