>백엔드 개발 >C++ >C#에서 카드 덱을 무작위로 만들기 위해 Fisher-Yates Shuffle을 어떻게 구현합니까?

C#에서 카드 덱을 무작위로 만들기 위해 Fisher-Yates Shuffle을 어떻게 구현합니까?

DDD
DDD원래의
2025-01-04 14:49:44879검색

How Can I Implement a Fisher-Yates Shuffle to Randomize a Deck of Cards in C#?

C#에서 카드 덱 섞기

카드 덱을 섞을 수 있는 프로그램을 만들려면 셔플링 알고리즘을 구현해야 합니다. Fisher-Yates 셔플 알고리즘은 주어진 목록의 무작위 순열을 보장하는 널리 사용되는 기술입니다.

C#에서 이 알고리즘을 구현하려면 다음 단계를 고려하세요.

  1. Fisher-Yates Shuffle 클래스 만들기:

    라는 정적 클래스를 정의합니다. 다음 메소드를 포함하는 FisherYates:

    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;
        }
    }

    이 메소드에서:

    • deck은 카드를 나타내는 정수 배열입니다.
    • r은 사용되는 Random 객체입니다. 무작위 인덱스를 생성합니다.
    • 알고리즘은 Deck.
    • n으로 표시되는 각 요소에 대해 [0, n] 범위 내에서 임의의 인덱스 k가 생성됩니다.
    • 인덱스 n과 k의 값은 다음을 달성하기 위해 교체됩니다. 무작위 순열.
  2. Deck:

    Deck 클래스에서 카드(카드) 배열에 대해 FisherYates.Shuffle() 메서드를 호출하는 메서드를 만듭니다.

    public void Shuffle()
    {
        FisherYates.Shuffle(cards);
    }
  3. 프로그램 업데이트:

    Main() 메소드에서 프로그램 클래스는 초기 카드 목록을 표시한 후 사용자에게 덱을 섞을 횟수를 묻습니다. 그런 다음 데크의 Shuffle() 메서드를 지정된 횟수만큼 호출합니다.

    Console.WriteLine("How Many Times Do You Want To Shuffle?");
    int numShuffles = int.Parse(Console.ReadLine());
    
    for (int i = 0; i < numShuffles; i++)
    {
        mydeck.Shuffle();
    }
  4. 섞은 카드 표시:

    마지막으로 , 덱의 카드를 다시 반복하고 섞인 카드를 표시합니다. 순서:

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

다음 단계를 수행하면 사용자가 원하는 셔플 수에 따라 카드 덱을 섞고 섞인 카드를 표시할 수 있는 프로그램을 만들 수 있습니다.

위 내용은 C#에서 카드 덱을 무작위로 만들기 위해 Fisher-Yates Shuffle을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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