zeka oyunu ve döngü

Katılım
27 Mayıs 2009
Mesajlar
6
Excel Vers. ve Dili
2007
Selamlar arkadaşlar

Şu şekilde bir soru var;

10 mahkum daire biçiminde sıralanır ve kılıç kimdeyse solundaki ilk mahkumu öldürecektir. Ölenin solundaki ilk canlı mahkuma kılıcı verecektir. İşlem tek bir mahkum kalana kadar devam edecek ve bu mahkum serbest bırakılacaktır. Kılıcın ilk verildiği mahkuma 1 den başlayarak sola doğru takip eden sayılar verilirse, bu on kişi içinden sırasıyla 2,4,6,8,10,3,7,1,9 numaralı mahkumlar ölecek ve 5 numaralı mahkum kurtulacaktır. Aynı işlem 1000 mahkumluk bir gruba uygulansa hangi mahkum kurtulur?

Mahkum sayısı az olduğunda kafadan hesaplama yapılabiliyor ancak sayı arttığında nasıl bir döngü oluşturmak lazım? excel'de bu mümkün müdür?
 
Son düzenleme:
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
1000 mahkumluk gruptan 977. mahkum kurtulur.

Formüllü bir cevabı vardır mutlaka. Ancak kod ile çözümü aşağıdaki şekilde yapılabilir.


Kod:
Dim liste()

Sub soru()
  kackisi = 1000
  say = 0
  
  ReDim liste(kackisi)
  For i = 1 To kackisi
    liste(i) = i
  Next i

  Do While 0 < 1
    If say = kackisi - 1 Then Exit Do
    For i = 1 To kackisi
      a = i
      If liste(i) <> "Ö" Then
        For j = a To kackisi
          If j + 1 > kackisi Then
             a = 1
             j = 0
            If liste(1) <> "Ö" Then
               liste(1) = "Ö"
               say = say + 1
               Exit For
            End If
            ElseIf liste(j + 1) <> "Ö" Then
               liste(j + 1) = "Ö"
               say = say + 1
               Exit For
           End If
         Next j
       End If
     Next i
  Loop
  
    For i = 1 To kackisi
      If liste(i) <> "Ö" Then
         'Cells(z, 1).Value = Z
         
         Cells(1, 2).Value = liste(i)
         Exit For
      End If
    Next i

End Sub
 
Son düzenleme:
Katılım
27 Mayıs 2009
Mesajlar
6
Excel Vers. ve Dili
2007
1000 mahkumluk gruptan 17. mahkum kurtulur.

Formüllü bir cevabı vardır mutlaka. Ancak kod ile çözümü aşağıdaki şekilde yapılabilir.

Bir kaç sayı grubu denedim tutuyor.

Bir istatistik;

Olurda böyle bir duruma düşerseniz 3. kişi olmaya çalışın : )))

Satır Etiketleri Say KURTULAN
1 9
3 499
5 249
9 124
17 62
33 30
65 15
129 7
257 3
513 1
Genel Toplam 999



Kod:
Dim liste()

Sub soru()
  kackisi = 1000
  say = 0
  
  ReDim liste(kackisi)
  For i = 1 To kackisi
    liste(i) = i
  Next i

  Do While 0 < 1
    If say = kackisi - 1 Then Exit Do
    For i = 1 To kackisi
      If liste(i) <> "Ö" Then
        For j = i To kackisi
          If j + 1 > kackisi Then
            If liste(1) <> "Ö" Then 
               liste(1) = "Ö"
               say = say + 1
               Exit For
            end if
          ElseIf liste(j + 1) <> "Ö" Then
               liste(j + 1) = "Ö"
               say = say + 1
               Exit For
           End If
         Next j
       End If
     Next i
  Loop
  
    For i = 1 To kackisi
      If liste(i) <> "Ö" Then
         Cells(1, 1).Value = liste(i)
         Exit For
      End If
    Next i
  
End Sub
Cevabınız ve uğraşınız için teşekkürler sayın asri. Ancak yazdığınız kodda bir mantık hatası olabilir mi? Ben cevabı daha farklı buldum, bir kaç farklı yöntem denediğimde de hep aynı sonuca ulaştım.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,017
Excel Vers. ve Dili
2013 Türkçe
Sub Döngü()
Range("B3:B100000") = ""
Range("B3") = Range("E4").Value
Range("B4:B" & Range("E3") + 2) = "=IF(B3=E$3,1,B3+1)"
Range("B4:B" & Range("E3") + 2) = Range("B4:B" & Range("E3") + 2).Value

a = 3
Do Until Cells(a + 1, 2) = ""
son = Cells(Rows.Count, 2).End(3).Row + 1
Cells(son, 2) = Cells(a, 2).Value
a = a + 2
Loop
Range("E5") = Cells(Cells(Rows.Count, 2).End(3).Row, 2).Value
End Sub
 

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
30 a kadar bir tablo oluşturduğumda mantıkta bir hata var gibi. Kontrol edip dönş yaparım.
Ayrıca tabloda belli bir düzen var. Buradan yola çıkıp bir formülde yazılabilir.
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
İlk mesajımdaki kod güncellendi.
Döngüde bir sorun vardı. Düzeltildi.
 
Katılım
27 Mayıs 2009
Mesajlar
6
Excel Vers. ve Dili
2007
Sub Döngü()
Range("B3:B100000") = ""
Range("B3") = Range("E4").Value
Range("B4:B" & Range("E3") + 2) = "=IF(B3=E$3,1,B3+1)"
Range("B4:B" & Range("E3") + 2) = Range("B4:B" & Range("E3") + 2).Value

a = 3
Do Until Cells(a + 1, 2) = ""
son = Cells(Rows.Count, 2).End(3).Row + 1
Cells(son, 2) = Cells(a, 2).Value
a = a + 2
Loop
Range("E5") = Cells(Cells(Rows.Count, 2).End(3).Row, 2).Value
End Sub
Teşekkürler Muhammet Bey
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
İdris Bey, çözümünüz tam olarak "Bu gerçek hayatta ne işimize yarayacak?" sorusunun cevabı olmuş. Logaritmanın bu şekilde kullanılabileceğini öğrenmiş olduk böylece.

Zahmet olmazsa bunun mantığını da açıklar mısınız?
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022

Merhum İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,094
Excel Vers. ve Dili
Excel, 365 - İngilizce

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Teşekkürler.
 
Üst