Bu Problemi Kodlama Yaparak Çözün!

connec

Uzman üye
5 Nis 2022
1,100
1,040
1283
cv48p7d.png


Selamlar değerli THT üyeleri. Geçenlerde yazılım mühendisi bir abi ile muhabbet ederken bana bir problem anlattı. Üniversite zamanında finallerde bu problemi kodlama ile çözmeleri istenmiş ve sınıftan sadece 1 kişi çözebilmiş. Bu problemi neredeyse her dil ile çözebilirsiniz. Problem ise şöyle:

Bir kralın 10 tane mahkumu varmış. Kral bu mahkumların biri hariç hepsini öldürmek istemiş. Bunu yapmak için aklına bir fikir gelmiş. 10 mahkumdan bir daire oluşturmuş ve bir mahkumun yanına gidip demiş ki: "Sen 1 numaralı mahkumsun." Daha sonra 1 numaralı mahkuma kılıç vermiş. Ve 2 numaralı mahkumu öldürüp kılıcı 3 numaralı mahkuma vermesini söylemiş. Böylece sürekli mahkumlar bir yanındakini öldürüp kılıcı diğer mahkuma vermiş. En sonunda ise 5 numaralı mahkum hayatta kalmış. Soru şu:
10 mahkum varken 5. mahkum hayatta kalıyorsa, 10.000 mahkum varken kaçıncı mahkum hayatta kalır.


Evet arkadaşlar ilk başta girdi ile mahkum sayısını alın. Ve program sona kalan mahkumun numarasını versin. Ben çözene kadar kafayı yedim. Sizde uğraşın emin olun katkısı olacaktır.


Sonuç ve Python İle Çözümü
VT
NOT: Eğer çözümde bir hata varsa bildirin lütfen.
 

projex

Üye
10 Ara 2021
208
135
25
Türkiye
soruda mantık hatası var.

1 2 3 4 5 6 7 8 9 10
1turda hayatta kalanlar
1 3 5 7 9 10
ikinci turda
3 7 10
üçüncü turda
7

5. numaralı ayakta kalmıyor soruda ise 5 ayakta kaldığı söyleniyor ama 7 ayakta kalıyor

Sorun nedir tam olarak
dosya açılmıyor yada linux kullandığım için
 

connec

Uzman üye
5 Nis 2022
1,100
1,040
1283
soruda mantık hatası var.

1 2 3 4 5 6 7 8 9 10
1turda hayatta kalanlar
1 3 5 7 9 10
ikinci turda
3 7 10
üçüncü turda
7

5. numaralı ayakta kalmıyor soruda ise 5 ayakta kaldığı söyleniyor ama 7 ayakta kalıyor
ikinci turda
1 3 5 7 9 hayatta kalıyor. 9. mahkum 10. mahkumu öldürüp kılıcı 1. mahkuma veriyor.

Daha sonra
1 5 9
9 5
5
 

EnverEmin

Yeni üye
19 Eki 2013
4
4
Java:

public class Main {
public static void main(String[] args) {
int mahkumSayisi = 10000; // 10000 mahkum var
int hayattaKalacakMahkum = (int) Math.ceil(Math.sqrt(mahkumSayisi)); // Kaçıncı mahkum hayatta kalacak
System.out.println(hayattaKalacakMahkum + " numaralı mahkum hayatta kalacak.");
}
}

Bu kod, 10.000 mahkum varsa kaçıncı mahkumun hayatta kalacağını hesaplayacaktır. Örneğin, çıktısı "316 numaralı mahkum hayatta kalacak" olacaktır.

Not: Bu problem çözümü, matematiksel bir yöntem kullanılarak yapılmıştır. Özellikle, "Math.sqrt()" fonksiyonu kullanılarak, karekök alınmış ve "Math.ceil()" fonksiyonu kullanılarak yuvarlama yapılmıştır. Bu yöntem, problemdeki "öldürme" işlemini matematiksel olarak modellemektedir.

10 mahkum varken 5. mahkum hayatta kalıyorsa, bu 10 mahkumdan 4 tanesinin öldürülmüş olduğu anlamına gelir. Bu durumda, 10.000 mahkum varken kaçıncı mahkum hayatta kalır sorusuna yanıt olarak, 10.000 mahkumdan 4999 tanesinin öldürülmüş olacağı anlamına gelen 5000. mahkum hayatta kalacaktır.

Bu sorunun cevabını bulmak için, 10 mahkum varken kaçıncı mahkum hayatta kalıyorsa, 10.000 mahkum varken kaçıncı mahkum hayatta kalacağını bulmak için çarpım işlemini kullanabilirsiniz. Örneğin, 10 mahkum varken 5. mahkum hayatta kalıyorsa, 10.000 mahkum varken kaçıncı mahkum hayatta kalacağını bulmak için 5'i 10.000 ile çarpmalısınız.
 
Son düzenleme:

1wexter1

Katılımcı Üye
24 Eyl 2021
921
647
Uzayda1yer
Python:
mahkum = 10000
adım = 0

while mahkum > 1:
  mahkum = mahkum // 2
  adım += 1

print(f"{adım}. adımda 1 hayatta kalan mahkum kalır.")
 

Will Graham

Katılımcı Üye
14 Eki 2022
561
462
cv48p7d.png


Selamlar değerli THT üyeleri. Geçenlerde yazılım mühendisi bir abi ile muhabbet ederken bana bir problem anlattı. Üniversite zamanında finallerde bu problemi kodlama ile çözmeleri istenmiş ve sınıftan sadece 1 kişi çözebilmiş. Bu problemi neredeyse her dil ile çözebilirsiniz. Problem ise şöyle:

Bir kralın 10 tane mahkumu varmış. Kral bu mahkumların biri hariç hepsini öldürmek istemiş. Bunu yapmak için aklına bir fikir gelmiş. 10 mahkumdan bir daire oluşturmuş ve bir mahkumun yanına gidip demiş ki: "Sen 1 numaralı mahkumsun." Daha sonra 1 numaralı mahkuma kılıç vermiş. Ve 2 numaralı mahkumu öldürüp kılıcı 3 numaralı mahkuma vermesini söylemiş. Böylece sürekli mahkumlar bir yanındakini öldürüp kılıcı diğer mahkuma vermiş. En sonunda ise 5 numaralı mahkum hayatta kalmış. Soru şu:
10 mahkum varken 5. mahkum hayatta kalıyorsa, 10.000 mahkum varken kaçıncı mahkum hayatta kalır.


Evet arkadaşlar ilk başta girdi ile mahkum sayısını alın. Ve program sona kalan mahkumun numarasını versin. Ben çözene kadar kafayı yedim. Sizde uğraşın emin olun katkısı olacaktır.


Sonuç ve Python İle Çözümü
VT
NOT: Eğer çözümde bir hata varsa bildirin lütfen.
Python:
sayilar = []
adim = 0

for n in range(1, 10001):
    sayilar.append(n)

while len(sayilar) != 1:
    for n in sayilar:
        n2 = sayilar.index(n)
        try:
            sayilar.pop(n2+1)
        except:
            sayilar.pop(0)      
    adim+=1
print(f"{str(adim)}.adımda {str(sayilar[0])}. mahkum hayatta kaldı.")

13.adımda 3617. mahkum hayatta kaldı.
 
Son düzenleme:

connec

Uzman üye
5 Nis 2022
1,100
1,040
1283
Java:

public class Main {
public static void main(String[] args) {
int mahkumSayisi = 10000; // 10000 mahkum var
int hayattaKalacakMahkum = (int) Math.ceil(Math.sqrt(mahkumSayisi)); // Kaçıncı mahkum hayatta kalacak
System.out.println(hayattaKalacakMahkum + " numaralı mahkum hayatta kalacak.");
}
}

Bu kod, 10.000 mahkum varsa kaçıncı mahkumun hayatta kalacağını hesaplayacaktır. Örneğin, çıktısı "316 numaralı mahkum hayatta kalacak" olacaktır.

Not: Bu problem çözümü, matematiksel bir yöntem kullanılarak yapılmıştır. Özellikle, "Math.sqrt()" fonksiyonu kullanılarak, karekök alınmış ve "Math.ceil()" fonksiyonu kullanılarak yuvarlama yapılmıştır. Bu yöntem, problemdeki "öldürme" işlemini matematiksel olarak modellemektedir.
Python:
mahkum = 10000
adım = 0

while mahkum > 1:
  mahkum = mahkum // 2
  adım += 1

print(f"{adım}. adımda 1 hayatta kalan mahkum kalır.")
Maalesef sonuçlar yanlış.

Python:
sayilar = []
adim = 0

for n in range(1, 10001):
    sayilar.append(n)

while len(sayilar) != 1:
    for n in sayilar:
        n2 = sayilar.index(n)
        try:
            sayilar.pop(n2+1)
        except:
            sayilar.pop(0)     
    adim+=1
print(f"{str(adim)}.adımda {str(sayilar[0])}. mahkum hayatta kaldı.")

13.adımda 3617. mahkum hayatta kaldı.
Çok daha kısa ve temiz olmuş ellerine sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.