CrazyCat
25/11/2002, 20:01
bir soru:
1,2,...n kümesinin bütün permütasyonlarını içeren en kısa sayı dizisinin bulunması gerekiyor. her bir permütasyon, dizi içerisinde kesintisiz bir alt-dizi olarak yer alması gerekiyor. istenilen verilen bir n değeri için böyle bir diziyi üretmek.
Varsayımlar
0<n<10
Girdi:
sayi.inp dosyasından okunacak bir n değeri
Çıktı:
dizi.out adlı metin dosyasına yazılacak rakamlar arasında boşluk olmayacak.
Örnek:
sayi.inp
3
dizi.out
312313213
(birer atlamayla 3 ün permütasyonları elde ediliyor)
bu soru (sanırım) bilgisayar olimpiyatlarında daha önce sorulmuş. olimpiyatlarda finale kalan bir öğrenci getirdi bir ilk etapta bir çözüm yazıp verdim. ama olması gerektiği gibi sade ve hızlı olmadı. sonucun 3 saniyeden daha kısa zamanda üretilmesi gerekiyor.
sorun şurda eğer olası permütasyonlar kümesi bir linked list yapısı içerisine kaydedilirse istenilen hız elde edilebilir. fakat list yapısı için delete ve find yöntemleri falan da yazılması gerekiyor. program oldukça uzunlaşıyor. yazmak için yeterince süre yok. (bütün sorular için 5 saat zaman var.)
birde *nix bir sistemde denenirse çalışma zamanı daha doğru hesaplanabilir.
l.list yapısı kullanılmadan cevaplayabilirmisiniz? yada nasıl bir çözüm önerirsiniz.
bir de mümkün olduğunca standart ansi c/c++ kullanılması daha doğru. Örneğin (perm. hesaplamak için STL yöntemlerini kullanmaktan kaçındık) birde çok karmaşık olmayan veriyapıları tercih sebebi çünkü öğrenci lise 2. sınıf öğrencisi ve sadece 15 gün C dersi almış :)
biraz kafa yormak belki iyi gelir. güzel sonuçlar çıkarsa çözdüğümüz ve çözemediğimiz :D diğer sorularla cevaplaını da burda yazarım:) bütün arkadaşlar için antreman olur.
bu arada da ara sıra böyle sorularda gelmese hazıra alışıp mayışacaktık. bir dahaki sefere gençlere karşı mahçup olmamak için diğer soruları da ufak ufak çözmeye başladım :D
1,2,...n kümesinin bütün permütasyonlarını içeren en kısa sayı dizisinin bulunması gerekiyor. her bir permütasyon, dizi içerisinde kesintisiz bir alt-dizi olarak yer alması gerekiyor. istenilen verilen bir n değeri için böyle bir diziyi üretmek.
Varsayımlar
0<n<10
Girdi:
sayi.inp dosyasından okunacak bir n değeri
Çıktı:
dizi.out adlı metin dosyasına yazılacak rakamlar arasında boşluk olmayacak.
Örnek:
sayi.inp
3
dizi.out
312313213
(birer atlamayla 3 ün permütasyonları elde ediliyor)
bu soru (sanırım) bilgisayar olimpiyatlarında daha önce sorulmuş. olimpiyatlarda finale kalan bir öğrenci getirdi bir ilk etapta bir çözüm yazıp verdim. ama olması gerektiği gibi sade ve hızlı olmadı. sonucun 3 saniyeden daha kısa zamanda üretilmesi gerekiyor.
sorun şurda eğer olası permütasyonlar kümesi bir linked list yapısı içerisine kaydedilirse istenilen hız elde edilebilir. fakat list yapısı için delete ve find yöntemleri falan da yazılması gerekiyor. program oldukça uzunlaşıyor. yazmak için yeterince süre yok. (bütün sorular için 5 saat zaman var.)
birde *nix bir sistemde denenirse çalışma zamanı daha doğru hesaplanabilir.
l.list yapısı kullanılmadan cevaplayabilirmisiniz? yada nasıl bir çözüm önerirsiniz.
bir de mümkün olduğunca standart ansi c/c++ kullanılması daha doğru. Örneğin (perm. hesaplamak için STL yöntemlerini kullanmaktan kaçındık) birde çok karmaşık olmayan veriyapıları tercih sebebi çünkü öğrenci lise 2. sınıf öğrencisi ve sadece 15 gün C dersi almış :)
biraz kafa yormak belki iyi gelir. güzel sonuçlar çıkarsa çözdüğümüz ve çözemediğimiz :D diğer sorularla cevaplaını da burda yazarım:) bütün arkadaşlar için antreman olur.
bu arada da ara sıra böyle sorularda gelmese hazıra alışıp mayışacaktık. bir dahaki sefere gençlere karşı mahçup olmamak için diğer soruları da ufak ufak çözmeye başladım :D