} // Hedef sayının kendisini bulma metodu bool FarkIslemListe(List <int> sayilar, int hedef) { /*Bu metod IslemLıste metodu ile aynı çalışır * fakat while döngüsüne her girildiğinde hem hedef sayının fark sayısı kadar fazalasına * hem de fark sayısı kadar ekiğine bakılır*/ /*Döngü fark 10 dan küçük olana kadar fark her seferinde 1 artırılarak devam eder * ilk önce hangi DortIslem metodu true değerini verirse onun cevabı yazılır metoddan çıkılır*/ int fark = 1; while (fark < 10) { foreach (int sayi in sayilar) { List <int> islemliste = new List <int>(sayilar); islemliste.Remove(sayi); Sonuc fazlasonuc = DortIslem(islemliste, sayi, (hedef + fark)); Sonuc eksiksonuc = DortIslem(islemliste, sayi, (hedef - fark)); if (fazlasonuc.kontrol) { label8.Text = ($"Hedef Sayinin {fark} fazlasi bulundu!"); Sonuclabel.Text = (sayi.ToString() + fazlasonuc.islem + " = " + hedef + " + " + fark); return(true); } if (eksiksonuc.kontrol) { label8.Text = ($"Hedef Sayinin {fark} eksigi bulundu!"); Sonuclabel.Text = (sayi.ToString() + eksiksonuc.islem + " = " + hedef + " - " + fark); return(true); } } fark++; } /*Eğer hedef sayının 9 fazlası veya 9 eksiği dahi bulunamamışsa false değer döndürülür*/ return(false); } // Hedef sayının fazla/eksik bulma metodu
} // Bruteforce dört islem metodu bool IslemListe(List <int> sayilar, int hedef) { /*Bu döngü hedef sayı bulununcaya kadar sayilar listesindeki * her sayı için DortIslem metodunu çağırır*/ /*Eğer hedef sayı bulunduysa metod gerekli işlemi * Sonuclabel a yazar ve true değerini verir*/ foreach (int sayi in sayilar) { List <int> islemliste = new List <int>(sayilar); islemliste.Remove(sayi); Sonuc sonuc = DortIslem(islemliste, sayi, hedef); if (sonuc.kontrol) { label8.Text = "Hedef Sayi Bulundu!"; Sonuclabel.Text = (sayi.ToString() + sonuc.islem + " = " + hedef); return(true); } } /*Eğer hedef sayının kendisi bulunamadıysa FarkIslemListe metodu çağırılır*/ return(FarkIslemListe(sayilar, hedef)); } // Hedef sayının kendisini bulma metodu
// 1 ISLEM FONKSİYONLARINI GERÇEKLEŞTİREN METODLAR static Sonuc DortIslem(List <int> sayilar, int ortasayi, int hedef) { /*Bu algoritma Bruteforce dört işlem algoritmasıdır * listedeki sayılar biribirleri içinde 4 işlemden geçirilir * her işlemden sonraki sonuç ortasayi adlı int olarak 1 sayıymış gibi devam eder * hedef sayıya ulaşıncaya veya olabilecek bütün işlemler yapılıncaya kadar*/ /*Yapılan işlemler 2.000.000 adetten fazladır * i7 8750h işlemci ve 16gb ram bulunan bir bilgisayarda * hedef sayıya ulaşılması yaklaşık 0,08 saniye sürmektedir*/ Sonuc ortasonuc = new Sonuc(); if (ortasayi == hedef) { ortasonuc.kontrol = true; ortasonuc.islem = ""; return(ortasonuc); } foreach (int sayi in sayilar) { List <int> TempList = new List <int>(sayilar); TempList.Remove(sayi); if (TempList.Count == 0) { if (ortasayi - sayi == hedef) { ortasonuc.kontrol = true; ortasonuc.islem = "-" + sayi; return(ortasonuc); } if (ortasayi + sayi == hedef) { ortasonuc.kontrol = true; ortasonuc.islem = "+" + sayi; return(ortasonuc); } if (ortasayi * sayi == hedef) { ortasonuc.kontrol = true; ortasonuc.islem = "*" + sayi; return(ortasonuc); } if (ortasayi / sayi == hedef) { ortasonuc.kontrol = true; ortasonuc.islem = "/" + sayi; return(ortasonuc); } ortasonuc.kontrol = false; ortasonuc.islem = "f" + sayi; return(ortasonuc); } else { ortasonuc = DortIslem(TempList, ortasayi - sayi, hedef); if (ortasonuc.kontrol) { ortasonuc.islem = "-" + sayi + ortasonuc.islem; return(ortasonuc); } ortasonuc = DortIslem(TempList, ortasayi + sayi, hedef); if (ortasonuc.kontrol) { ortasonuc.islem = "+" + sayi + ortasonuc.islem; return(ortasonuc); } ortasonuc = DortIslem(TempList, ortasayi * sayi, hedef); if (ortasonuc.kontrol) { ortasonuc.islem = "*" + sayi + ortasonuc.islem; return(ortasonuc); } ortasonuc = DortIslem(TempList, ortasayi / sayi, hedef); if (ortasonuc.kontrol) { ortasonuc.islem = "/" + sayi + ortasonuc.islem; return(ortasonuc); } } } return(ortasonuc); } // Bruteforce dört islem metodu