Son 2 yıldır KTÜ Bilgisayar Mühendisliği Bölüm Başkanı Prof.Dr.Vasıf Nabiyev öncülüğünde düzenlenen bilgisayar olimpiyatlarına kurucularından olduğum 4Primes büyük bir gururla sponsor oluyor. Sponsorluğun dışında final yarışması için bir de ödüllü özel soru hazırlıyoruz. 2012 baharında düzenlenen 3. olimpiyatlar için hazırladığım soruyu geç de olsa paylaşmak istedim. Yazının sonunda bir de örnek çözüm yer alıyor.
Olimpiyatlarda bir yarışmacı takım ödüllü sorumuza doğru yanıt vermeyi başardı. Aşağıda verdiğim örnek çözüm gerekenden çok daha fazlasını içeriyor. Doğru yanıt veren takım oldukça sade ve güzel bir çözümle geldi. Bu güzel çözümün karşılığında da ödüllerini aldılar. M. Esat YAŞAYAN, Yasin YILMAZ ve Hakan SÖNMEZ'den oluşan takımı bir kez de buradan tebrik etmek isterim.
Soru
Uzun yıllar önce paralel bir evrende, for ve while döngülerinin yanı sıra dizi(array) kullanımının yasak olduğu, STL kütüphanesinin henüz icat edilmediği günlerde tren yolculukları için gerekli olan kömür miktarını hesaplama görevi bilgisayar bilimcilerine verilmişti. Her yolculuktan önce seyahat edecek yolcu sayısına göre kaç kg kömüre ihtiyaç olduğu hesaplanıyor ve gereken kömür trene yükleniyordu. Hesaplama yapılırken vagon başına gereken kömür miktarları toplanarak trenin toplam kömür ihtiyacı elde ediliyordu. Bir vagon için gereken kömür miktarı, o vagonda seyahat edecek yolcu sayısına eşit ya da küçük ve yolcu sayısı ile aralarında asal olan pozitif tamsayıların sayısına eşitti. Örnek olarak vagonda 9 yolcu var ise 9 ile aralarında asal olan pozitif tamsayılar 1, 2, 4, 5, 7 ve 8 olduğundan bu vagon için 6kg kömür gerekli oluyordu.
Sizden sıradaki tren için girdi.gir dosyasından vagonlardaki yolcu sayılarını okuyarak sırasıyla her bir vagon için gereken kömür miktarı ile tren için gereken toplam kömür miktarını cikti.cik dosyasına kaydeden bir uygulamayı C dilinde yazmanızı istiyoruz.
Kısıtlar
Döngülerin(for, while, do while, goto) yanı sıra dizi(array) kullanımı yasaktır.
STL kütüphanesi henüz icat edilmemiş olduğundan kullanılamaz.
girdi.gir dosyasından okunan değerler üzerinde okuma anında herhangi bir işlem yapılamaz. Hesaplamalar ve çıktı işlemleri(dosyaya yazma) ancak tüm değerler okunup vagonlar doldurulduktan sonra yapılabilir.
İpuçları
Dosyadan okunacak olan tüm yolcu sayıları asaldır.
Örnek bir girdi.gir dosyası aşağıda verilmiştir.
17 31 37 97 59 107 131 157 113 173
Bu girdiye göre trenin toplam 10 vagonu bulunmakta ve bu vagonlarda sırasıyla 17, 31, 37, 97, 59, 107, 131, 157, 113 ve 173 yolcu oturmaktadır. Bu trenin hareket etmesi için 912kg kömür gerekir. Bu verilere göre cikti.cik dosyası aşağıdaki gibi olur.