Hindistan cevizi ve maymun sorusu

Katılım
15 Mart 2005
Mesajlar
380
Excel Vers. ve Dili
Microsoft 2016 En 64 Bit
Altın Üyelik Bitiş Tarihi
20-03-2024
Merhaba,

Biraz eğlence birazda mantığımız çalıştıralım diye farklı bir konuyu yazayım dedim.

Gemi kazasından kurtulan beş kişi ve bir maymun ıssız adaya çıkarlar. Çıkar çıkmaz da hindistancevizi toplamaya koyulurlar. Akşama kadar toplayabildikleri kadar cevizi bir kenara yığıp yatar uyurlar. Adamlardan biri gece uyanır, cevizleri beşe böler, artan bir taneyi de maymuna verir, kendi hissesini bir yere saklayıp yatar. Ardından biri daha uyanır. O da, kendinden önce arkadaşının yaptığından habersiz cevizleri beşe böler, artan bir taneyi maymuna verir, kendi hissesini saklar ve yatar. Derken üçüncü, dördüncü ve beşinci adam da sırayla uyanıp aynı şeyi yaparlar. Sabah hepsi uyandığında ortada kalan cevizler bir kez daha beşe bölünür, bu kez maymuna bir şey düşmez.

En başta kaç ceviz vardı?

Bu soruyu aşağıdaki kod ile çözdüm.

Sonradan araştırınca bu soruya çok kafa yorulduğunu gördüm. https://tr.qaz.wiki/wiki/The_monkey_and_the_coconuts sitesinde farklı çözüm yöntemleri var.

Farklı çözüm şekillerini de görmek isteriz.

Kod:
Sub ceviz_prb_coz()

Dim c, n, i As Integer
Dim cvzsay As Long
Dim msg As String

n = 5  'kişi sayısı
c = (n - 1)  'çarpan

' x ceviz sayısı
' 1.kişinin aldığı  (x-1) / 5                                           -  kalan   (x-1) * 4/5
' 2.kişinin aldığı  (((x-1) * 4/5) -1) / 5                              -  kalan   (((x-1) * 4/5) -1) * 4/5
' 3.kişinin aldığı  (((((x-1) * 4/5) -1) * 4/5) - 1) / 5                -  kalan   (((((x-1) * 4/5) -1) * 4/5) - 1) * 4/5
' 4.kişinin aldığı  (((((((x-1) * 4/5) -1) * 4/5) - 1) * 4/5) - 1) / 5  -  kalan   (((((((x-1) * 4/5) -1) * 4/5) - 1) * 4/5) - 1) * 4/5
' 5.kişinin aldığı  (((((((((x-1) * 4/5) -1) * 4/5) - 1) * 4/5) - 1) * 4/5) - 1) / 5    -  kalan   (((((((((x-1) * 4/5) -1) * 4/5) - 1) * 4/5) - 1) * 4/5) - 1) * 4/5


tekrar:
cvzsay = (n - 1) * c
msg = Format(((n - 1) * c - 1) / n * (n - 1), "#,###") & " : " & Format(cvzsay, "#,###")
For i = 1 To (n - 1)
    If cvzsay Mod (n - 1) = 0 Then
        cvzsay = ((cvzsay / (n - 1)) * n) + 1
        msg = msg & " : " & Format(cvzsay, "#,###")
    Else
        c = c + n
        GoTo tekrar
    End If
Next i

MsgBox "Adadaki cevizler çalınmadan önceki ceviz sayıları (dizi) :" & vbCrLf _
        & msg & vbCrLf & vbCrLf & vbCrLf _
        & "Adadaki toplam ceviz sayısı: " & Format(cvzsay, "#,###"), , "SONUÇ"

End Sub
 
Son düzenleme:
Üst