static void Main(string[] args) { Random rand = new Random(); int target = rand.Next(100, 999); List <int> list = new List <int>(); bool kontrol = false; /*Döngüden çıkmak için gereken bool*/ for (int i = 0; i < 5; i++) { list.Add(rand.Next(1, 9)); } list.Add(10 * rand.Next(1, 9)); foreach (int item in list) { Console.WriteLine(item + ""); } Console.WriteLine("Hedef Sayi: " + target); foreach (int bas in list) { if (kontrol == true) { break; } List <int> runList = new List <int>(list); runList.Remove(bas); /*Boş liste ile başlayıp ram kullanımı minimuma indirmek için temizliyoruz*/ Sonuc sonuc = getSonuc(runList, bas, target); if (sonuc.basari) { Console.WriteLine(bas + sonuc.cikti); Console.WriteLine("Sonuca Tam Ulasildi!!!"); Console.WriteLine("Puan: 10"); Console.ReadLine(); kontrol = true; } else { int fark = 1; if (kontrol == false) { while (fark < 10) { /*Sıralı olarak doğru çalışması için kademe kademe bool işlemi tekrarlandı*/ if (kontrol == true) { break; } foreach (int basam in list) { if (kontrol == true) { break; } List <int> runList2 = new List <int>(list); runList2.Remove(basam); Sonuc fazlaSonuc = getSonuc(runList2, basam, (target + fark)); /*Sonuç işlemini aynı şekilde işleme koyup bu sefer fark için çalıştırıyor*/ Sonuc eksikSonuc = getSonuc(runList2, basam, (target - fark)); if (fazlaSonuc.basari == true) { Console.WriteLine(fark + " Fazlasi Bulundu!!!"); Console.WriteLine(basam + fazlaSonuc.cikti); Console.WriteLine("Puan: " + (10 - fark)); Console.ReadLine(); kontrol = true; } if (eksikSonuc.basari == true) { Console.WriteLine(fark + " Eksigi Bulundu!!!"); Console.WriteLine(basam + eksikSonuc.cikti); Console.WriteLine("Puan: " + (10 - fark)); Console.ReadLine(); kontrol = true; } } fark++; } } } } }
public static Sonuc getSonuc(List <int> sayilar, int ortasayi, int hedef) { Sonuc ortaSonuc = new Sonuc(); if (ortasayi == hedef) { ortaSonuc.basari = true; ortaSonuc.cikti = ""; Console.WriteLine("Toplam = " + ortasayi); return(ortaSonuc); } foreach (int sayi in sayilar) { List <int> yeniList = new List <int>(sayilar); yeniList.Remove(sayi); /* Her seferinde listede ekstra eleman olmasını engellemek ve * ram kullanımı azaltmak için baştan her seferde siliniyor*/ if (yeniList.Count == 0) { /*Tüm işlemleri sırayla deneyecek en yakın sonuca ulaştırmak için * en yakın orta sayıyı bulamaya çalışıyor*/ if (hedef == ortasayi / sayi) { ortaSonuc.basari = true; ortaSonuc.cikti = "/" + sayi; Console.WriteLine("Toplam = " + (ortasayi / sayi)); return(ortaSonuc); } if (hedef == ortasayi * sayi) { ortaSonuc.basari = true; ortaSonuc.cikti = "*" + sayi; Console.WriteLine("Toplam = " + (ortasayi * sayi)); return(ortaSonuc); } if (hedef == ortasayi + sayi) { ortaSonuc.basari = true; ortaSonuc.cikti = "+" + sayi; Console.WriteLine("Toplam = " + (ortasayi + sayi)); return(ortaSonuc); } if (hedef == ortasayi - sayi) { ortaSonuc.basari = true; ortaSonuc.cikti = "-" + sayi; Console.WriteLine("Toplam = " + (ortasayi - sayi)); return(ortaSonuc); } ortaSonuc.basari = false; ortaSonuc.cikti = "Hata!!!"; return(ortaSonuc); } else { /*Hala bulamadıysa orta sayıyla aynı mantıkla kombinasyonları teker teker aynı şekilde yapacak*/ ortaSonuc = getSonuc(yeniList, ortasayi / sayi, hedef); if (ortaSonuc.basari == true) { ortaSonuc.cikti = "/" + sayi + ortaSonuc.cikti; return(ortaSonuc); } ortaSonuc = getSonuc(yeniList, ortasayi * sayi, hedef); if (ortaSonuc.basari == true) { ortaSonuc.cikti = "*" + sayi + ortaSonuc.cikti; return(ortaSonuc); } ortaSonuc = getSonuc(yeniList, ortasayi + sayi, hedef); if (ortaSonuc.basari == true) { ortaSonuc.cikti = "+" + sayi + ortaSonuc.cikti; return(ortaSonuc); } ortaSonuc = getSonuc(yeniList, ortasayi - sayi, hedef); if (ortaSonuc.basari == true) { ortaSonuc.cikti = "-" + sayi + ortaSonuc.cikti; return(ortaSonuc); } } } return(ortaSonuc); }