1. sayfa
Perm(“”,”abc”); Perm( string answer,string input ){ İf( inout.size ==0) Print answer ;return; For int i 0;i<input.size ; i++ Perm(answer+input.charat(i), input(substring(0,i)) + input(substring(i+1) ) } Böyle yapanilirsiniz, parametreler ile verileri işleyip sanki bir yerde tutuyormıç gibi işlem olabilir Buradan yukardan içeriye transfer var gibi Bunun tersini de içteki veriyi dışarı dönecek şekilde de yapmak denenebilir ama daha zor olur muhtemelen Diğer yola backtracking deniyor galiba, örneklerini araştırıp yapmayı deneyebilirsin Edit: inputta tekrarlı bir eleman varsa benim çözüm işe yaramıyor Soruda tekrarlı olup olmadığını belirtmemiş, onu da belirtmesi gerekiyor |
tekrarlı olanları da kapsamış olmalı aksinin soylememesi halinde varsaymamız lazım keske bi de bunu sahte kod üzerinde degil de compiler üzerinde yazsaydınız bu yol biraz havada kaldı random olarak metotlarını bekliyordum ben daha fazla geliştirilmeli problem zaten String yerine her tipi alıp toString ile Stringe çevirmeliyiz,ardında ornegin "MEHMET" dedigimiz zaman 720 farklı degil de 180 farklı kelime yazdırmalı(anlamlı,anlamsız) ekstra bir kontrol lazım eklenen kelimenin daha once ekledigini onun için de linear search yapar bu biraz verimsiz yol soyle bir durum da olabilir 5 harf bi inputtan 3 harf kaç farklı output için de saglayan bir sey yaparsak hem tüm harflerin kullanımı hem de istenilen kadar harfi ortadan cıkarmış olabiliriz. |
tekrarlı dahil olduğu da göstermek için örneği direkt tekrarlı verebilirdi Yoksa ben acaba şjnu şunu kastetti mi diye düşünmemem gerekiyor O zaman gerekli gereksiz fazladan durumları sorgulamam gerekir, soru açık değil yani Forumda compiler için kod yazmak bence gereksiz önemli olan mantığı zaten kalanı sadece 3-5 değişiklik ile compilerda yazmak “random olarak metotlarını bekliyordum ben” Burada ne dediğinizi anlayamadım. tostring kısmı da kod okuma kısmı oluyor Soruda output şu şekilde olacak vb gibi bir açıklama yok Hackerrankteki gibi definition , inputs aralığı formatı, outputs formatı vb söylenmeli “soyle bir durum da olabilir 5 harf bi inputtan 3 harf kaç farklı output için de saglayan bir sey yaparsak hem tüm harflerin kullanımı hem de istenilen kadar harfi ortadan cıkarmış olabiliriz” Bu dediğinizi de anlayamadım —— Tekrarli permutasyonda benim çözümü geliştirecek olursak İçerideki for döngüsü aynı elemanlar için bir kez döndürürsek Cevaba ulaşıyoruz |
random derken stringin elemanlarını rastgele input uzunlugunda sıralaması yani "araba" yazarsak 0 dan 4 üncü indeksi rastgele atarsa oyle de kelimeler oluşabilir [4][2][2][0][3] boyle yani charAt ile random olarak atayabilir java.util.Random; kullanarak demiştim rastgele yapmayı ama orda daa aynı eleman tekrar eder diye tam olmuyordu kasıt oydu bir diger nokta girilen inputun uzunlugu kadar permutasyonu buluyorsunuz siz 5 sizeli input 5 sizeli output yani 5 sizeli input girilse 3 sizeli out put çıkabilen bir şey yazılırsa her durum da çalışır orda da bunu demeye çalıştım sürekli input uzunlugu kadar output üretmesi kısıtlıyor ondan dedim toString her tip de çalışması için dedim sizin yazdıgınıza gore 34653 soyle bir şey çalışmaz ya da 't','h','u','q','ı' gibi bir şey girilirse diye dedim bana kalırsa yazdıgınız gibi olacak gibi gozukmuyor tam anladım yaptıgınızı yani compilerde bi cıktı alamadan boyle olur demek güç elimde bi cıktı üretecek code blogu var ama iterative olarak çalışıyor recursive olarak yapamadım https://paste.ubuntu.com/p/zKnh4kXv6B/ |
Lisp ile rekürsif çözüm sadece 9 satır: < Resime gitmek için tıklayın > |
|
Program yanlış çıktı üretiyor. < Resime gitmek için tıklayın > |
1. sayfa
soruyu yapmak istiyorum recursion olarak ama tüm cıktıların farklı olması lazım yaptıklarımı da farklı bir yere atıp tekrar kontrol edersem cok maaliyetli oluyor bunun için en iyi yol sizce nedir ?
tekrarlı permutasyonlar da dahil
< Bu mesaj bu kişi tarafından değiştirildi DH Anonim -- 9 Aralık 2019; 16:36:18 >