none
C# Fikstur Tekrarsız Eşleştirme RRS feed

  • 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.


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




    7 Ocak 2017 Cumartesi 12:27

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.



    7 Ocak 2017 Cumartesi 09:32
  • Cevabınız için teşekkür ederim.
    7 Ocak 2017 Cumartesi 10:13
  • 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); } }




    7 Ocak 2017 Cumartesi 12:27