> 백엔드 개발 > C++ > 사용자가 지정한 셔플을 기반으로 C#에서 카드 덱을 효율적으로 셔플하려면 어떻게 해야 합니까?

사용자가 지정한 셔플을 기반으로 C#에서 카드 덱을 효율적으로 셔플하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-03 13:10:38
원래의
290명이 탐색했습니다.

How can I efficiently shuffle a deck of cards in C# based on user-specified shuffles?

C#의 카드 섞기

일반적인 프로그래밍 연습에는 특정 언어로 카드 섞기 시뮬레이션을 작성하는 작업이 포함됩니다. 이 질문은 카드 한 벌을 섞고 사용자에게 섞은 횟수를 쿼리하는 방법을 탐구합니다.

문제 설명

제공된 코드에는 데크, 카드 및 카드에 대한 클래스가 포함됩니다. 초기 카드 순서를 표시하고 셔플 횟수에 대한 사용자 입력을 받는 프로그램과 함께 슈트입니다. 문제는 셔플링 메커니즘을 구현하는 데 있습니다.

해결책

Knuth 셔플이라고도 알려진 Fisher-Yates 셔플은 배열 셔플링에 널리 사용되는 알고리즘입니다. 제자리에. 업데이트된 코드에는 다음 알고리즘이 통합되어 있습니다.

static public class FisherYates<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">static Random r = new Random();
로그인 후 복사

  static public void Shuffle(Card[] Deck)</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">{
    for (int n = deck.Length - 1; n > 0; --n)
    {
        int k = r.Next(n+1);
        Card temp = deck[n];
        deck[n] = deck[k];
        deck[k] = temp;
    }
}
로그인 후 복사

}

이 클래스는 카드 배열을 다음과 같이 사용하는 정적 메서드인 Shuffle을 정의합니다. 입력. 그런 다음 덱을 역순으로 반복하여 현재 카드와 교체할 무작위 카드를 선택합니다. 전체 데크를 반복함으로써 알고리즘은 철저한 혼합을 보장합니다.

구현

셔플을 원본 코드에 통합하려면 다음에서 Shuffle 메서드 호출을 추가하세요. 사용자로부터 셔플 횟수를 얻은 후 Program 클래스의 기본 메서드:

Deck myDeck = 새로운 덱(); // 새 덱 생성<br>int numShuffles = Int32.Parse(Console.ReadLine()); // 원하는 셔플에 대한 사용자 입력 읽기<br>FisherYates.Shuffle(myDeck.Cards); // 원하는 횟수만큼 덱을 섞습니다<br>foreach(myDeck.Cards의 카드 c) // 셔플된 덱을 인쇄합니다<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Console.WriteLine(c);
로그인 후 복사

}

결론

Fisher-Yates 셔플 알고리즘은 카드 데크의 효율적인 셔플링을 허용하고 사용자가 지정한 셔플 카운트 요구 사항을 충족합니다. 코드는 요청에 따라 셔플된 데크를 출력합니다.

위 내용은 사용자가 지정한 셔플을 기반으로 C#에서 카드 덱을 효율적으로 셔플하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
이전 기사:HashCode는 프로그래밍에서 개체를 어떻게 고유하게 식별합니까? 다음 기사:부동 소수점 나눗셈은 항상 곱셈보다 느립니까?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿