• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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:
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:
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.
 
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

  • Döngü.xlsm
    Döngü.xlsm
    33.7 KB · Görüntüleme: 11
  • 54.jpg
    54.jpg
    22.3 KB · Görüntüleme: 3
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.
 
İlk mesajımdaki kod güncellendi.
Döngüde bir sorun vardı. Düzeltildi.
 
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
 
İ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?
 
Teşekkürler.
 
Geri
Üst