Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mengocok dek kad dalam C# dengan cekap berdasarkan kocok yang ditentukan pengguna?

Bagaimanakah saya boleh mengocok dek kad dalam C# dengan cekap berdasarkan kocok yang ditentukan pengguna?

Linda Hamilton
Lepaskan: 2025-01-03 13:10:38
asal
338 orang telah melayarinya

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

Pengocokan Kad dalam C#

Latihan pengaturcaraan biasa melibatkan menulis simulasi mengocok kad dalam bahasa tertentu. Soalan ini meneroka merombak dek kad dan menyoal pengguna untuk bilangan kocok.

Pernyataan Masalah

Kod yang disediakan termasuk kelas untuk dek, kad dan saman, bersama-sama dengan program untuk memaparkan pesanan kad awal dan mengambil input pengguna pada bilangan shuffle. Cabarannya terletak pada pelaksanaan mekanisme shuffling.

Penyelesaian

Shuffle Fisher-Yates, juga dikenali sebagai shuffle Knuth, ialah algoritma yang digunakan secara meluas untuk merombak tatasusunan di tempat. Kod yang dikemas kini menggabungkan algoritma ini:

kelas awam statik FisherYates
{

static Random r = new Random();
Salin selepas log masuk

Kocok kosong awam statik(Kad[] dek)

{
    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;
    }
}
Salin selepas log masuk

}

Kelas ini mentakrifkan kaedah statik, Kocok, yang mengambil tatasusunan kad sebagai input. Ia kemudian melelang melalui dek dalam susunan terbalik, memilih kad rawak untuk ditukar dengan kad semasa. Dengan mengulangi seluruh dek, algoritma memastikan pencampuran yang menyeluruh.

Pelaksanaan

Untuk memasukkan shuffle ke dalam kod asal, tambahkan panggilan pada kaedah Shuffle dalam Kaedah utama kelas Program selepas mendapat bilangan shuffle daripada pengguna:

Deck myDeck = new Deck(); // Cipta dek baharu
int numShuffles = Int32.Parse(Console.ReadLine()); // Baca input pengguna pada shuffle yang diingini
FisherYates.Shuffle(myDeck.Cards); // Kocok dek bilangan kali yang dikehendaki
foreach (Kad c dalam myDeck.Cards) // Cetak dek kocok
{

Console.WriteLine(c);
Salin selepas log masuk

}

Kesimpulan

Menggabungkan Algoritma shuffle Fisher-Yates membolehkan mengocok dek kad yang cekap dan memenuhi keperluan kiraan shuffle yang ditentukan pengguna. Kod mengeluarkan dek yang dikocok seperti yang diminta.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengocok dek kad dalam C# dengan cekap berdasarkan kocok yang ditentukan pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan