首頁 > 後端開發 > 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# 中的洗牌

常見的程式設計練習涉及用給定語言編寫洗牌模擬。此問題探討洗牌一副牌並詢問使用者洗牌的次數。

問題陳述

提供的代碼包括一副牌、牌和牌的類套裝,以及一個顯示初始紙牌順序並接受用戶輸入洗牌次數的程序。挑戰在於實現混洗機制。

Fisher-Yates shuffle,也稱為 Knuth shuffle,是一種廣泛使用的陣列混洗演算法就位。更新後的程式碼合併了以下演算法:

static public class FisherYates<br>{<pre class="brush:php;toolbar:false">static Random r = new Random();
登入後複製

; static public void Shuffle(Card[] Deck)<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 合併到原始程式碼中,請在以下程式碼中新增對Shuffle 方法的呼叫從使用者取得洗牌次數後的Program類的Main方法:

Deck myDeck =新甲板(); //建立一個新牌組<br>int numShuffles = Int32.Parse(Console.ReadLine()); // 讀取所需洗牌的使用者輸入<br>FisherYates.Shuffle(myDeck.Cards); // 將牌組洗牌所需的次數<br>foreach (Card c in myDeck.Cards) //印洗牌後的牌組<br>{<pre class="brush:php;toolbar:false">Console.WriteLine(c);
登入後複製

}

結論

Fisher-Yates 洗牌演算法可實現紙牌的高效洗牌,並符合使用者指定洗牌次數的要求。程式碼依照要求輸出洗牌後的牌組。

以上是如何在 C# 中根據使用者指定的洗牌方式有效地洗一副牌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板