Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melaksanakan Kocok Fisher-Yates untuk Merawak Dek Kad dalam C#?

Bagaimanakah Saya Boleh Melaksanakan Kocok Fisher-Yates untuk Merawak Dek Kad dalam C#?

DDD
DDDasal
2025-01-04 14:49:44879semak imbas

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

Mengkocok Dek Kad dalam C#

Mencipta program yang boleh mengocok dek kad memerlukan pelaksanaan algoritma kocok. Algoritma shuffle Fisher-Yates ialah teknik yang digunakan secara meluas yang memastikan pilih atur rawak senarai tertentu.

Untuk melaksanakan algoritma ini dalam C#, pertimbangkan langkah berikut:

  1. Mencipta Kelas Kocok Fisher-Yates:

    Tentukan kelas statik yang dipanggil FisherYates yang mengandungi kaedah berikut:

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

    Dalam kaedah ini:

    • dek ialah susunan integer yang mewakili kad.
    • r ialah objek Rawak yang digunakan untuk menjana indeks rawak.
    • Algoritma bermula dengan lelaran daripada elemen terakhir dalam dek.
    • Untuk setiap elemen (diwakili oleh n), indeks rawak k dijana dalam julat [0, n].
    • Nilai pada indeks n dan k ditukar untuk mencapai pilih atur rawak.
  2. Mengocok Dek:

    Dalam kelas Dek anda, cipta kaedah untuk memanggil kaedah FisherYates.Shuffle() pada susunan kad (kad):

    public void Shuffle()
    {
        FisherYates.Shuffle(cards);
    }
  3. Mengemaskini Program:

    Dalam kaedah Utama() kelas Program anda, selepas dipaparkan senarai awal kad, minta pengguna untuk bilangan kali mereka mahu mengocok dek. Kemudian, panggil kaedah Shuffle() pada dek bilangan kali yang ditentukan:

    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. Memaparkan Kad Kocok:

    Akhir sekali , ulangi kad dalam dek sekali lagi dan paparkan yang dikocok pesanan:

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

Dengan mengikuti langkah ini, anda boleh mencipta program yang boleh mengocok dek kad mengikut bilangan kocok yang dikehendaki pengguna dan memaparkan kad yang dikocok.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Kocok Fisher-Yates untuk Merawak Dek Kad dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn