11.5 C
İstanbul
10 Aralık 2018
Algoritmalar Matematik

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 900*900=810000 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 100*100=10000 seçenek kalır. Böyle bir varsayımda bulunarak 81 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ç: 913*993 = 906609 olarak bulunur.

Ögetay Kayalı

Bize destek olarak daha çok içerik üretmemize katkıda bulunun!

Related posts

Project Euler 2: Çift Fibonacci Sayıları

Ögetay Kayalı

Kuantum Mekaniği: Schwarz Eşitsizliğinin Bir Çözümü

Ögetay Kayalı

Koch Kar Tanesi: İçini Gezebileceğiniz Ama Çevresini Dolaşamayacağınız Şekil!

Ögetay Kayalı

Yorum Bırakın