En iyi yanıtlayıcılar
C# Fikstur Tekrarsız Eşleştirme

Soru
-
Merhaba.
C#'ta butona basıldığında tanımlanmış bir dizi takımı --(string[] takimlar = {"","a","b","c","ç","d","e","f","g","h","i",""} gibi-- lig fikstürü şeklinde aynı takımlar tekrar eşleşmeden, başında hafta sayısı (HAFTA 15 gibi) olacak şekilde listbox'a nasıl yazdırabilirim.
Yardımlarınızı bekliyorum.
- Düzenleyen lazrail1818 7 Ocak 2017 Cumartesi 06:35
Yanıtlar
-
List<string> myTakimlar = new List<string>(new string[] { "Takım 1", "Takım 2", "Takım 3", "Takım 4", "Takım 5", "Takım 6" }); string[,] myEslemeSonuc = new string[(myTakimlar.Count/2), 2]; int myRandom1 = 0, myRandom2 = 0; Random myR = new Random(); if (Math.IEEERemainder(myTakimlar.Count, 2) == 0) // array dizisi eleman sayısı çift olmalı. { for (int i = 0; i <= myTakimlar.Count; i++) { myRandom1 = myR.Next(0, myTakimlar.Count);
System.Threading.Thread.Sleep(16); // hep aynı sayı gelmesin diye. myRandom2 = myR.Next(0, myTakimlar.Count); int xx = 0; // sonsuz döngü oluşmaz ama ben sağlamcıyım. while (myRandom1 == myRandom2 && xx <1000) { myRandom2 = myR.Next(0, myTakimlar.Count); } if (xx >= 1000) break; //işlem başarısız, hata mesajı ver ve tekrar denet. Bu ihtimal yok ancak dedim sağlamcıyım. myEslemeSonuc[i, 0] = myTakimlar[myRandom1]; myEslemeSonuc[i, 1] = myTakimlar[myRandom2]; myTakimlar.RemoveAt(myRandom1); myRandom2 = myRandom2 > myRandom1 ? myRandom2 - 1 : myRandom2; // bir önceki komut diziyi 1 eleman azalttığı için. myTakimlar.RemoveAt(myRandom2); } }
- Düzenleyen tavukluPilav 7 Ocak 2017 Cumartesi 13:43
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 17 Ocak 2017 Salı 13:25
Tüm Yanıtlar
-
Buna benzer bir yapıyı şöyle yazmıştım. sayısal oyunlarla ilgiliydi sanırım. Daha iyisi vardır mutlaka ama bir fikir olsun.
dizi eleman sayısı kadarlık bir döngü başlat. i < takımDizisi.length olacak dinamik yani, sabit sayı verme.
0 ile takımDizisi.length arasında random 1 rakam alacaksın,
0 ile takımDizisi.length arasında random 2. rakamı alacaksın ama 1. rakamla aynı ise tekrar deneyeceksin. taaki farklı olana kadar.(iç döngü)
Bu 2 random rakam karşılığını takım dizisinden al ve sonuç dizisine ekle.
takım dizisinden bu 2 takımı remove et. Takım dizisi eleman sayısı 2 düşmüş olacak.
döngü, takım dizisi eleman sayısı sıfırlanana kadar devam eder.
belgi dış döngüyü takım dizisi eleman sayısı 2 tane kalana kadar diyebilirsin, son 2 otomatik eşleşmiş olur...
olay basit aslında ama kodlamak için vaktim yoktu özür dilerim.
- Düzenleyen tavukluPilav 7 Ocak 2017 Cumartesi 09:35
-
-
List<string> myTakimlar = new List<string>(new string[] { "Takım 1", "Takım 2", "Takım 3", "Takım 4", "Takım 5", "Takım 6" }); string[,] myEslemeSonuc = new string[(myTakimlar.Count/2), 2]; int myRandom1 = 0, myRandom2 = 0; Random myR = new Random(); if (Math.IEEERemainder(myTakimlar.Count, 2) == 0) // array dizisi eleman sayısı çift olmalı. { for (int i = 0; i <= myTakimlar.Count; i++) { myRandom1 = myR.Next(0, myTakimlar.Count);
System.Threading.Thread.Sleep(16); // hep aynı sayı gelmesin diye. myRandom2 = myR.Next(0, myTakimlar.Count); int xx = 0; // sonsuz döngü oluşmaz ama ben sağlamcıyım. while (myRandom1 == myRandom2 && xx <1000) { myRandom2 = myR.Next(0, myTakimlar.Count); } if (xx >= 1000) break; //işlem başarısız, hata mesajı ver ve tekrar denet. Bu ihtimal yok ancak dedim sağlamcıyım. myEslemeSonuc[i, 0] = myTakimlar[myRandom1]; myEslemeSonuc[i, 1] = myTakimlar[myRandom2]; myTakimlar.RemoveAt(myRandom1); myRandom2 = myRandom2 > myRandom1 ? myRandom2 - 1 : myRandom2; // bir önceki komut diziyi 1 eleman azalttığı için. myTakimlar.RemoveAt(myRandom2); } }
- Düzenleyen tavukluPilav 7 Ocak 2017 Cumartesi 13:43
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 17 Ocak 2017 Salı 13:25