Project Euler 4: En Büyük Palindrom Çarpımı

Soru: Palindrom sayılar her iki yönden de aynı okunan sayılardır. İki basamaklı iki sayının çarpımıyla oluşturulabilen en büyük palindrom 91*99=9009'dur.
Üç basamaklı iki sayının çarpımı olarak yazılabilen en büyük palindromu bulunuz.

Bu soruda yapmamız gereken iki temel işlem var: Sayının palindrom olup olmadığını test etmek ve en büyük palindromu bulmak.

Palindrom Testi

Aslında sorunun amacı her ne kadar palindrom olup olmadığının testiyle uğraştırmaya çalışsa da bunu elimizdeki metotlar ile kolayca yapabiliyoruz. Fakat yine de mantığını anlamakta fayda var. Elimizdeki sayıyı önce metine çevirip, ardından karakterlere ayırmalıyız. Sonra bu karakterleri ters sırayla başka bir metin olarak kaydedip, ilk metin ile aynı olup olmadığını kontrol etmeliyiz. Bunu aşağıdaki kod parçacığı ile kolaylıkla yapabiliyoruz.

int en_Buyuk = 1;
for (int i = 999; i >= 900; i--)
    for (int j = 999; j >= 900; j--)
        if (PalindromKontrol(i * j) && i*j>en_Buyuk)
            en_Buyuk = i * j;

En Büyük Palindrom

Üç basamaklı iki sayının çarpımları arasından en büyük palindromu bulmak biraz yorucu bir işlem. 100 ile 999 arasından bir sayı seçip, yine 100 ile 999 arasından seçilen bir sayı ile çarpmamız gerekiyor. Yani seçenek demek. Her birini tek tek değerlendirirken de ayrıca işlem yapıyoruz. Bu durum fazlasıyla gereksiz işlem barındırıyor. Basit bir yaklaşımla en büyük palindromun 900'ün üzerindeki iki sayının çarpımı olarak ifade edilebileceğini düşünebiliriz. Böylelikle sadece seçenek kalır. Böyle bir varsayımda bulunarak kat daha az işlem yapmış oluyoruz. Yani problemi çözme süremiz neredeyse yüzde birine iniyor.

public static bool PalindromKontrol(int sayi)
{
    char[] dizi = sayi.ToString().ToCharArray();
    Array.Reverse(dizi);

    if (new string(dizi) == sayi.ToString())
        return true;
    else
        return false;
}

Böylelikle sonuç: olarak bulunur.

Ögetay Kayalı

Ögetay Kayalı

Astronom. Özel ilgi alanı teorik kozmoloji, özellikle Einstein'ın görelilik kuramının modifiye edilmesi (modified gravity) üzerine uğraşıyor. Bunların yanında ender bulduğu zaman aralıklarında kafasına esince programlama, 3B modelleme, makineler, tasarım, fotoğrafçılık, resim ve satranç ile de ilgileniyor.

Ögetay Kayalı 120 makale yazdıÖgetay Kayalı tarafından yazılan tüm makaleleri gör