Verdiğin linkten sonra probleme şimdi yeniden baktım. Kod yazmadan sadece matematik formul ile de bulunabilir belki fakat kodla çözünce sonuç garanti. Nitekimhttps://rosettacode.org/wiki/Josephus_problem#Perl 'da bu problemin Perl ile çözümünü buldum, kodu biraz sadeleştirerek ve Türkçe yorum ekleyerek yazdım. 0 .. 999 arası endeksli 1000 kişi içinde endeksi 976 olan kişi hayatta kaldı. < Resime gitmek için tıklayın > |
Rosetta.org 'a baktın mı?http://rosettacode.org/wiki/Josephus_problem#Java 'da Java çözümünü de yazmışlar cunku her bir dilde çözümünü yazmışlar. (linki tıklayınca DH Forum kampanya linki eklediği için # etiketinden dolayı açmayabilir; DH linkini silerek açın) |
1000 kişinin bir yuvarlak masada oturduğunu düşünün. 1. kişi yanındakini öldürüp bıçağı canlı kalan kişiye veriyor. O da aynı şeyi yapıyor. En sonunda masadaki kaçıncı kişi sağ kalır. Mesela, birinci kişi ikinciyi öldürüyor ve bıçağı üçüncü kişiye veriyor. Üçüncü kişi de dördüncüyü öldürüyor ve bıçağı beşinciye veriyor. Bunun çözümünü programlama ile çözmek istedim ve aşağıdaki mantığı kurdum ama anlamadığım bir nedenden ötürü hata veriyor. Kod: visitors = range(1, 1001) Hata:
|
Sorunu çözdüm galiba: 1000 tane elaman var kümemde. İlk başlarda "i = i + 1" çalışıyor çünkü sayılar küçük ama sayı büyüdükçe kümem küçülüyor. Sonra Index'e karşılık sayı gelmiyor. Misal i oldu 700 ama visitors[700] karşılık elaman yok.
Bu şekilde çalıştı. |
Bu algoritmayla neyi hedefliyorsun ? Nasıl bir liste oluşturmak istiyorsun ? |
Cevabi buldugumu dusunuyorum konu disindaki konunuzuda attim cevap ama silinmesi ve sadece burayi takip edenlerde varsa diye burayada atiyorum < Resime gitmek için tıklayın > |
python 2 kullanıyorsun, onu kullanma artık bitti python 2. bu yazdığın şey python 3'te çalışmaz çünkü range nesnesi immutable oldu, del yapamazsın. |
|
sana degil soru sorana cevap verdim, yoksa zaten ayni kisi misin? yaptigin seyin trick denecek bir tarafi yok, range nesnesini list yapiyorsun hepsi bu |
masayı temsilen array[n] olsa. 1000 kişi varsa n = 999 olacak ; array 0 dan başlayacak. ilk turda tek sayı endeksler ikinci turda çift sayı böyle azalarak sonuçta en sondan bir önceki yani başlangıçta array[n-1] deki kişi kalır gibi yani döngü döndürmeye ve delete ile array elemanlarını silerek hesaplamaya gerek olmadan sonuç belli gibi. |
İnternette araştırın, bu tür sorulara matematikçiler çok zekice çözümler üretmişler. Başlangıç içinhttps://www.geeksforgeeks.org/puzzle-100-people-in-a-circle-with-gun-puzzle/. |
|
Şuradan okuyabilirsiniz, hızlıca göz gezdirdim, güzel anlatmış gibi göründü. Vazgeçtim o siteye bir daha baktım, ama Ali Nesin'in çözümü daha güzel.https://matematikkoyu.org/docs/sayma.pdf buradan josephus diye aratın bu daha iyi. |
Cevap 977. kişi olmalı ama. ![]() Edit: Endeks demişsin pardon. ![]() |
Rosettacode.org 'a baktın mı? Python ile masadan gidenlerin tek tek listesini vererek çözmüş. endeks 0 dan başladığı için onda da 976. endeks kalıyor < Resime gitmek için tıklayın > |
Hayır bin kişisiniz zaten, tükürseniz boğarsınız karşınızdakileri, niye birbirinizi öldürüyonuz demi![]() |
Problemin adı Josephus Circle matematik veya programlama ile çözülebilir.Adım adım çözen bir program yazmıştım ama java ile.İstersen koyayım. |
Ben ödev icabi circular linked list ile yazmistim.Bir de insan sayisini ve kac kisi araliklarla oldurcegini input aliyor.Ordakinden biraz farkli yani.Arkadas farkli bir algoritma ister belki diye yazdim. |
< Bu ileti tablet sürüm kullanılarak atıldı > Bu mesaja 1 cevap geldi. Cevapları Gizle