Ben bir öğrenciyim ve bir ara sınavın ortasındayım. Bunu benim için kodlamak isteyen insanlar aramıyorum ama bunun bir kısmına yardıma ihtiyacım var. Ben bir Blackjack oyunu yapmaya çalışıyorum ve bunu yapmak istiyorum ki, bir iskamedeki her kart için bir tane 52 tam sayı listesi [1,1,1,1,2,2,2,2 .....] . Fakat listeden rasgele bir sayıyı nasıl alır ve iptal eder? Bir kart aldığınızda normal bir güverte gibi onu yeniden çizemezsin. Program için rasgele bir parametre [n = rand()% 11 + 1] ayarlayabileceğimi biliyorum, ancak bir ARasgele Sayılar ön ayar listesinden
cevap
elde etmek için yukarıdaki ve ötesine geçmek istiyorum. Bunun gibi bir karıştırma algoritması kullanabilirsiniz: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle. Fisher - Yates shuffle bir dizi ile başlar, daha sonra dizinin her öğesini dizi içinden rastgele bir öğe ile değiştirir. Öğeleri birer birer çıkarmak da mümkündür, ancak daha karmaşıktır. Bir ikili ağacı kullanarak öğeleri birer birer rastgele kaldırabilirsiniz. Her düğümün altındaki toplam öğe sayısını saklayın. Her seferinde bir öğeyi kaldırmak için, 0'dan büyük veya ona eşit ve rastgele öğe sayısından daha az rastgele bir sayı üretin. Kökle başla. Sol alt öğenin altındaki öğelerin sayısından azsa, sol çocuğa gidin. Aksi halde, a-, ve doğru çocuğa gidelim. Bunu yinelemeli yapın. Ancak öğeleri tek tek kaldırmak daha karmaşıktır. Bir karıştırma algoritması kullanmak daha iyidir.
Bir diziden rasgele bir öğeyi kaldırmanın yolu yoktur.
Bunun yerine, rastgele seçilen öğeyi dizinin son öğesiyle değiştirmektir. Bununla birlikte, array_size_valid
değişkeninde dizideki geçerli öğelerinin sayısını saklamanız ve takas işlemi her gerçekleştiğinde bu değeri azaltmanız gerekir.
rastgele indeks oluşturma işlevi olacak konum Bu şekilde: Burada
rand_index = rand() % array_size_valid;
bir önemsiz yoludur:
int deck[52];
Ve: 52 tamsayılar içeren, bir dizi var ki 1, 1, 1, 1, 2, 2, 2, 2, .....
İstediğiniz değere ilklendirdiğinizde, bir kart çizildiğinde ilgili diziyi e elemanının net -1 (veya orijinal dışındaki herhangi bir değer):
int drawCard(int deck[])
{
do{
int randIndex = rand() % 52;
} while(deck[randIndex] == -1);
int drawnCard = deck[randIndex];
deck[randIndex] = -1;
return drawnCard;
}
bu yaklaşım yeterince verimli olmayabilir rağmen, çalışır, bu yüzden sizin gibi yeni başlayanlar için yararlı olabilir düşünüyorum.
- 1. "Düzgün" rasgele sayılar için algoritma
- 2. eşit olarak dağıtılmış rasgele sayılar
- 3. Excel Rasgele Sayılar haftaya bağlı
- 4. JavaFX TextArea ayar listesinden koordinat konumunu al
- 5. NumPy rastgele tohum farklı rasgele sayılar
- 6. Java rastgele sayılar rasgele değil mi?
- 7. R'de rasgele sayılar nasıl daha hızlı oluşturulur?
- 8. Rasgele Sayılar Nesnel-C İçinde Güvenli Oluşturma
- 9. Cython'da rasgele sayılar oluşturmak için doğru yol?
- 10. listesinden
- 11. Ruby'de Sayılar ve Yarım Sayılar Dizisi
- 12. iPhone'da rasgele sayıları nasıl oluştururum?
- 13. Python'da rasgele sayıları nasıl oluşturabilirim?
- 14. Binom rasgele sayı üretme
- 15. C++ üniform gerçek dağılımı kullanılarak oluşturulan rasgele sayılar gerçekten tekdüze bir şekilde dağıtılmamıştır
- 16. Ne kadar ilişkilidir i.d.d. julia'da normal sayılar
- 17. Ayar Varsayımlar
- 18. ayar değeri
- 19. Ayar nesnesi
- 20. Ayar getURL
- 21. Rasgele hızlı Rasgele hızlı uygulanması için
- 22. PowerShell'deki tam sayılar neden rakamlarla karşılaştırılır?
- 23. Numpy loadtxt yuvarlama sayılar
- 24. SSAX-SXML ve sayılar
- 25. haskell negatif ondalık sayılar
- 26. Kont ardışık sayılar
- 27. Büyük sayılar için Türler
- 28. bash: sayılar bir dizi
- 29. Kategorilerindeki makale sayısını sayılar
- 30. Çift sayılar çıktı kesiliyor
Tam olarak aradığım şey teşekkür ederim. – jojobuddy13
@ jojobuddy13 Sorunu çözdüğünü düşünüyorsanız lütfen bu cevabı kabul edin :) –
Bu sonsuz bir döngüye girme olanağına sahiptir. –