> 백엔드 개발 > C++ > C#에서 카드 덱을 섞는 Fisher-Yates 섞기 알고리즘을 어떻게 구현할 수 있나요?

C#에서 카드 덱을 섞는 Fisher-Yates 섞기 알고리즘을 어떻게 구현할 수 있나요?

DDD
풀어 주다: 2025-01-05 05:31:38
원래의
307명이 탐색했습니다.

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

Fisher-Yates 알고리즘을 사용하여 C#에서 카드 섞기

이 프로그래밍 작업에서 우리는 카드 한 벌을 최대한 많이 섞는 것을 목표로 합니다. 사용자가 원하는. 여기에는 System.Random 클래스를 활용하여 임의의 정수를 생성하고 Fisher-Yates 셔플 알고리즘을 구현하는 메서드를 만드는 작업이 포함됩니다.

기존 프로그램 구조:

제공된 코드 Program.cs, Deck.cs, Enums.cs 및 Card.cs를 포함한 여러 클래스로 구성됩니다. 이러한 클래스는 카드 게임의 구조를 정의합니다.

카드 섞기 알고리즘:

Fisher-Yates 섞기로 알려진 잘 알려진 섞기 알고리즘을 구현하려면 다음을 수행합니다. 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;
    }
}
로그인 후 복사

이 메소드에서는 0~n 범위 내에서 임의의 인덱스 k를 생성하고 인덱스 n과 k의 요소를 교환합니다. 이 프로세스는 데크의 각 요소에 대해 반복되어 요소를 효과적으로 섞습니다.

코드에 통합:

셔플 방법을 코드에 통합하려면 다음을 수행하세요. 다음 단계를 사용하십시오.

  1. Program.cs에서 Main 끝 부분에 다음 줄을 추가합니다. 방법:
int[] deck_ints = new int[52];
for (int i = 0; i < deck_ints.Length; i++)
{
    deck_ints[i] = i;
}

int num_shuffles = int.Parse(Console.ReadLine());
로그인 후 복사
  • 이것은 사용자로부터 셔플 수를 읽고 데크를 정수 배열로 초기화합니다.
  1. 덱 내 .cs, ShuffleCards에 다음 줄을 추가하세요. 방법:
FisherYates.Shuffle(deck_ints);
로그인 후 복사
  • Fisher-Yates 알고리즘을 사용하여 덱을 섞습니다.

이 단계를 따르면 카드 덱을 효과적으로 섞을 수 있습니다. 지정한 횟수만큼 셔플된 데크를 원하는 대로 표시합니다.

위 내용은 C#에서 카드 덱을 섞는 Fisher-Yates 섞기 알고리즘을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿