.:: M. Zahid Gürbüz Kişisel Web Sayfasına Hoşgeldiniz ::.

M. Zahid Gürbüz | Araştırma Görevlisi | Bilgisayar Mühendisliği | Doğuş Üniversitesi

SORU - UYANIK ASKER

HİKAYE

Kral askerlerinden 1000 tanesinin yolsuzluk yaptığını öğrenir ve onları kılıca dizmeye karar verir. İçlerinden bir tanesi krala "Kralım! Hepimizi öldüreceksiniz ama benim bir fikrim var. Bir halka oluşturalım ve birimiz kılıcı alıp sağındaki askeri öldürsün ve kılıcı sağındaki sağ askere versin. O şekilde 1 kişi kalıncaya kadar devam edelim. Son kalan askeri de bağışlayın." diyerek bir teklifte bulunur. Her askerin cezasını arkadaşı vereceği için bu fikir kralın aklına yatar. Bu durumda ilk kılıcı alan askere 1 numara dersek kaç numaralı asker hayatta kalacak acaba?

AMAÇ

Yukarıdaki hikayede kimin sağ kalacağını bulan C yada C++ programını yapınız.

CEVAP

Soruyu gönderen ve cevaplayan Merve AKBULUT'a Teşekkür ederim.
C Programı
Örnek çıktı

Yorumlar

Merve Akbulut 08.11.2008 22:39:52
:) tmm sustum

H.Bora ABACI 28.10.2008 14:30:53
1. adamı kimse kesemez o benim adamım :) Neden çünki biz kılıcı ilk eline alan adama 1 numarasını verdik dolayısıyla sağındaki adamada 2 dedik ve ilk turdaki son askere 1000 dedik

1. doğrudan ikinci adamı keser başka bir seceneği yoktur sıra 3 ye gecer oda 4. keser
yani ilk etapta tek sayılar çift sayıları keser. Son tek sayı olan 999
son çift sayı olan 1000 i keser. böylelikle 1. nin ikinci turda da kesilme ihtimali kalmamıştır.

1. etapdaki son kesici olan 999 1000 kesmiş ve kılıç yeniden 1. gecmiştir 2 etap ta 1. hiç çift kalmadığından 1. 3. kesemek durumdadır.

Hangi sayıların kesileceği önceden bellidir bir olasılık yoktur "1" sağ kalacaktır ve 513 en son kesilecektir.
Aslında bütün olay şudur
2.turda
hiç çift sayı kalmadığından bundan sonraki turlar tek sayılar arasında gececektir
tek ± tek = çift olduğundan kesilen ile kesen arasındaki fark daima çift sayı olacaktır.
3-1 = 2
2. turdaki fark sayısı 2 dir
3. turdaki de 4 çünki her adam sağındakini keser
4. ise 8
5. 16
yani 2 üzeri tur sayısı dir
bu durumda adamlar kendi sayısı + fark sayındaki adamı kesecektir.
1+16 = 17 birinci adam 5. turda 17. adamı keser
ancak adamların hiç biri 1 sayısından dan küçük değildir o halde hiçbiri bu sayıyı kesemeyecektir.

ve son turda
1+ 2^9 = 513 olur 1 513 keser ve "1" asla kesilmez.

Merve AKBULUT 14.10.2008 18:05:12
1. adamı diğer turda çemberin sonunda kalan adam kesebilirdi..

Bu sayfa hakkındaki tüm yorumları okumak için tıklayınız

İsim :
E-mail :
Güvenlik Kodu: : 444
Yorum :