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 > |
Eger herhangi bir anda, masada 2^n kadar insan varsa, o sirada bicagi elinde tutan kisi son kalan kimse olacaktir. Bu ipucu ile bakarsan algoritmaya loop yapmana gerek kalmaz, O(1) zamanda cozebilirsin. |
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. |
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 > |
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. |
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) |
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. |
Kod:
Hata: