3'le Bölünebilme-Permütasyon-Çarpmayla Sayma-Olasılık (şıklar yanlış)

Konusu 'Hatalı - Tekrarlanmış Sorular veya Çözümler (Faulty - Repeated Questions or Solutions)' forumundadır ve Honore tarafından 28 Mart 2023 başlatılmıştır.

Yüklüyor...
  1. Honore

    Honore Yönetici Yönetici

    Mesajlar:
    9.822
    Beğenileri:
    657
    Cinsiyet:
    Bay
    Meslek:
    Müh. (Elk./Bilg.)
    [​IMG]
    https://i72.servimg.com/u/f72/19/97/10/39/bardak12.png
    https://www.facebook.com/photo/?fbid=2045669832297556&set=g.137856289571386
    https://www.facebook.com/photo.php?fbid=10161238621028939&set=p.10161238621028939&type=3
    Yukarıdaki adreste verilmiş olan çözüm 1, 4, 7 sayılarının (3k + 1 durumuna ait olanlar) yalnızca birinci, dördüncü ve son sırada olabileceği varsayımıyla (problemde olmayan bir koşula göre) yapılmış ve bardak numaralarının toplamı da işleme alınmamış. Çözümdekinin aksine herhangi üçünün (yani numaralarının) değil toplamlarının 3'ün katı olması gerekiyor.

    Bardakların iç içe geçirildikten sonra yana yatırılıp XXX XXX X şeklinde tutulması halinde herbir durumda 7 rakamlı bir sayı oluşarak, üçer bardaklı birinci ve ikinci grup kendi içinde 3! şekilde sıralanır ve mümkün olan grup sayısı 12 tanedir. Her gruptan ayrıca 12 farklı dizilim mümkün, örneğin 123 XXX X için (ve buna bağlı olarak ayrıca 132, 213, 231, 312, 321 ile başlayanlar);
    1-----1234567
    2-----1234657
    3-----1235467
    4-----1235647
    5-----1235674
    6-----1235764
    7-----1236457
    8-----1236547
    9-----1236574
    10----1236754
    11----1237564
    12----1237654

    Problemdeki şartı sağlayan bütün gruplar (12 tane);
    123 XXX X ====> 3!·12
    126 XXX X ====> 3!·12
    135 XXX X ====> 3!·12
    156 XXX X ====> 3!·12
    234 XXX X ====> 3!·12
    237 XXX X ====> 3!·12
    246 XXX X ====> 3!·12
    267 XXX X ====> 3!·12
    345 XXX X ====> 3!·12
    357 XXX X ====> 3!·12
    456 XXX X ====> 3!·12
    567 XXX X ====> 3!·12

    Bu Koşula uygun dizilimlerin sayısı: 12·(3!·12) = 864
    Tüm durum: 7!
    Olasılık = 864 / (7!) = 12·(3!·12) / (3!·4·5·6·7) = 6 / 35

    Bilgisayar Programlamayla İlgilenenler İçin Fortran Uygulaması:
    [​IMG]
    https://i.servimg.com/u/f72/19/97/10/39/bardak13.png

    Program:
    Kod:
    program glass
    implicit none
    integer :: ax,bx,cx,dx,ex,fx,gx,i=1,bardak_no,indis=0,j
    integer, allocatable :: a(:),b(:),c(:),d(:),e(:),f(:),g(:),bardak(:)
    
    open (unit = 1, file = "sayilar.txt")
    
    do bardak_no=1234567,7654321
    
    gx=MOD(bardak_no,10)
    fx=MOD(bardak_no/10,10)
    ex=MOD(bardak_no/100,10)
    dx=MOD(bardak_no/1000,10)
    cx=MOD(bardak_no/10000,10)
    bx=MOD(bardak_no/100000,10)
    ax=MOD(bardak_no/1000000,10)
    
    if ((ax/=bx).and.(ax/=cx).and.(ax/=dx).and.(ax/=ex).and.(ax/=fx).and.  &
       (ax/=gx).and.(bx/=cx).and.(bx/=dx).and.(bx/=ex).and.(bx/=fx).and.   &
       (cx/=dx).and.(cx/=ex).and.(cx/=fx).and.(cx/=gx).and.(dx/=fx).and.   &
       (dx/=gx).and.(ex/=fx).and.(ex/=gx).and.(fx/=gx)) indis=indis+1
    
    enddo
    
    allocate (a(indis),b(indis),c(indis),d(indis),e(indis),f(indis),       &
    g(indis),bardak(indis))
    
    do bardak_no=1234567,7654321
    
    gx=MOD(bardak_no,10)
    fx=MOD(bardak_no/10,10)
    ex=MOD(bardak_no/100,10)
    dx=MOD(bardak_no/1000,10)
    cx=MOD(bardak_no/10000,10)
    bx=MOD(bardak_no/100000,10)
    ax=MOD(bardak_no/1000000,10)
    
    if ((ax>7).or.(bx>7).or.(cx>7).or.(dx>7).or.(ex>7).or.(fx>7).or.(gx>7) &
    .or.(ax==0).or.(bx==0).or.(cx==0).or.(dx==0).or.(ex==0).or.(fx==0).or. &
    (gx==0)) cycle
    
    if ((ax/=bx).and.(ax/=cx).and.(ax/=dx).and.(ax/=ex).and.(ax/=fx).and.  &
       (ax/=gx).and.(bx/=cx).and.(bx/=dx).and.(bx/=ex).and.(bx/=fx).and.   &
       (bx/=gx).and.(cx/=dx).and.(cx/=ex).and.(cx/=fx).and.(cx/=gx).and.   &
       (dx/=ex).and.(dx/=fx).and.(dx/=gx).and.(ex/=fx).and.(ex/=gx).and.   &
       (fx/=gx)) then
     
       ! Art arda gelen her üç bardak kontrol ediliyor, sonuç sıfır.
       if ((MOD((ax + bx + cx),3)==0).and.(MOD((dx + ex + fx),3)==0).and.  &
           (MOD((bx + cx + dx),3)==0).and.(MOD((cx + dx + ex),3)==0).and.  &
           (MOD((ex + fx + fx),3)==0)) then
         
           a(i) = ax; b(i) = bx; c(i) = cx
           d(i) = dx; e(i) = ex; f(i) = fx
           bardak(i)=bardak_no
           write(1,5) i,"    ",bardak(i)
           i=i+1
       else ! ilk üç ve ikinci üç grup bardak kontrol ediliyor, sonuç 864/(7!)
           if ((MOD((ax + bx + cx),3)==0).and.(MOD((dx + ex + fx),3)==0)) then
              a(i) = ax; b(i) = bx; c(i) = cx
              d(i) = dx; e(i) = ex; f(i) = fx
              bardak(i)=bardak_no
              write(1,5) i,"    ",bardak(i)
              i=i+1
           endif
       endif 
           
    endif
    
    enddo
    
    j=i-1
    
    write(6,10)" Olasilik = ",j," / (7!) = ",real(j)/(1*2*3*4*5*6*7)
    print*,"Tum bardak dizilimleri icin sayilar.txt dosyasina bakiniz."
    
    deallocate (a,b,c,d,e,f,g,bardak)
    
    close(1)
    
    5 format(i3,a,i7)
    10 format(a,i4,a,f7.5,/)
    
    end program
    Notlar:
    1. Bu sayıların herhangi bir sıralanışında arka arkaya gelen her üç bardağın üzerindeki numaraların yani;
    (birinci + ikinci + üçüncü) ve
    (ikinci + üçüncü + dördüncü) ve
    (üçüncü + dördüncü + beşinci) ve
    (dördüncü + beşinci + altıncı) ve
    (beşinci + altıncı + yedinci) toplamlarının hepsinin birden 3 ile tam bölünebilmesi olasılığı sıfır. Bu durum programda ayrıca kontrol ediliyor.

    2. İncelemek isteyenler için programın verdiği liste ektedir. Yine de göremediğim bir mantık hatası yapıyor (ve bilgisayara da o hatayı yaptırıyorsam) belirtmek isteyen hayırsevere şimdiden çok teşekkür ederim.

    Ekli Dosyalar:

Sayfayı Paylaş