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:
{
static Random r = new Random();
{ 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; } }
}
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:
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);
}
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!