Ödüllü Programlama Sorusu ve Çözümü (C#) (Yazılım yeni başlayan için algoritma geliştirme) – Mobile Application Developer

Ödüllü Programlama Sorusu ve Çözümü (C#) (Yazılım yeni başlayan için algoritma geliştirme)

Bu soru TBD Genç Ankara Şubesinin hazırladığı 2011 Şubat ayı programlama yarışmasının sorusuydu. Soruyu doğru cevaplandıranlar arasından iki kişiye kitap hediye edildi. Şanslı olanlardan birisi de bendim. Soru şöyleydi:

TBD Genç Ankara – Ödüllü Programlama Sorusu 12
(Bu soru TBD Genç Ankara Şubat 2011 bülteninde yayımlanmıştır.)
Soru 12: Uzun İp

Problem

Elinizde 100 metrelik düz ve iki uçlu bir ip var ve bu ip birkaç ipin birleştirilmesinden oluşturulmuş. Sizden bu kaynak noktalarından herhangi rastgele ikisini çözdüğünüzde oluşacak en büyük parçanın verilen bir A sayısından büyük veya eşit olma ihtimalini bulmanız isteniyor.

Girdisindede size ipin kaç tane kaynak noktası olduğu N, kaynak noktalarının ipin sol ucundan kaç metre uzakta olduğu ve A sayısının verileceği, çıktısında sadece ihtimalin ondalık gösterimini yazacak bir konsol uygulaması yazmanız isteniyor.

Açıklayıcı olması açısından, istenen sonuç, N kaynak noktasından herhangi (birbirinden farklı) ikisi çözüldüğünde oluşan parçalardan en büyüğünün uzunluğunun A’dan büyük veya eşit olma olasılığının ondalık gösterimidir. Lütfen girdi ve çıktı biçimini ve kısıtlamaları dikkatli okuyunuz.

Girdi ve Çıktı Biçimi

Girdide ilk olarak A sayısı verilecektir.
Daha sonra N kaynak noktası sayısı verilecektir.
Daha sonra N girdide kaynak noktalarının ipin sol ucundan uzaklığı metre cinsinden verilir.
Çıktıda olasılık cinsinden olan sonucu 0 ile 1 arasında ondalık biçimde yazdırınız. ör: 0.33333333
Çıktıya girdiyi açıklamak için gereksiz çıktılar yazdırmayınız. Sadece sonucu yazdırınız. Çıktınız standart çıktı akışına (stdout) yazdırılmalıdır. Pencereli uygulamalar ve dosyaya yazdırma kabul edilmemektedir.

Kısıtlamalar

    1 <= A <= 100
2 <= N <= 30
1 <= Kaynak noktası (sol uçtan uzaklık) <= 99
Kaynak noktaları birbirlerinden farklıdır.
Çıktıda virgülden sonraki 3 basamağa kadar hassasiyet yeterlidir. Yuvarlama yapmanıza gerek yoktur.

Örnek Girdi ve Çıktı

Girdi: 50 3 25 50 75
Çıktı: 1.0

Girdi: 60 6 16 32 48 64 80 96
Çıktı: 0.466666667
Çözüm Kriterleri

Bir komut satırı (console, command line) uygulaması yazmanız beklenmektedir. Pencere arayüzlü çözümler kabul edilmeyecektir.
Girdiler dosyadan okunmayacak, komut satırından standart girdi beslemesinden (stdin) verilecektir.
Algoritmanızı sadece C/C++, Java, Python ve C# dillerinden birini kullanarak kodlayabilirsiniz.
C/C++ kodları Linux çekirdekli bir işletim sisteminde (Ubuntu, Pardus vb.) gcc-4.4.5 derleyicisi kullanılarak, Java kodları JDK6u20 kullanılarak JVM üzerinde, C# kodları .NET 3.5 yüklü Windows™ 7 işletim sisteminde derlenecektir ve çalıştırılacaktır. Python kodları 32-bit Python 2.6.5 kullanılarak çalıştırılacaktır..
Derlenemeyen çözümler değerlendirilmeyecektir. Derlemenizi yukarıda belirtilen ortamlarda deneyiniz. Derleme kodunuz tek satırdan fazlaysa veya ek parametreler içeriyorsa çözümünüzle beraber bir dosyada komutları belirtiniz. Aksi halde çözümünüz derlenemez.

Gist Kodlar

Bulent SIYAH | 01 Şubat 2012