Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
28
Cevap
1055
Tıklama
0
Öne Çıkarma
Şu Algoritmanın Neresi Hatalı?
A
7 yıl
Binbaşı
Konu Sahibi

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)

i = 1

while(len(visitors) > 1):
del visitors[i]
i = i + 1

print visitors





Hata:



Traceback (most recent call last):
File "main.py", line 6, in <module>
del visitors[i]
IndexError: list assignment index out of range





DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



G
7 yıl
Teğmen

quote:

Orijinalden alıntı: Mephalay

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.
Mephalay hocamın dediği gibi boşu boşuna döngü kurmanın anlamı yok.
İ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/.


Bu mesaja 1 cevap geldi.
G
7 yıl
Teğmen

quote:

Orijinalden alıntı: AI Engineer

Bu sonuca nasıl ulaştınız? Sıfırdan kendiniz mi düşündünüz? Çünkü bunu düşünmek kolay değil. GeekforGeek'te kanıtı yok. Direkt formül vermiş.

Alıntıları Göster
Hayır ben bulmadım, araştırabilmeniz için linki vermiştim, sorunun orijinal adı Josephus problem.
Ş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.





< Bu mesaj bu kişi tarafından değiştirildi Guest-D639AD061 -- 23 Temmuz 2018; 22:21:53 >
Bu mesaja 1 cevap geldi.
T
7 yıl
Yarbay

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 >



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @soii
T
7 yıl
Yarbay

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)



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Glitch
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.