[MD-sorular] Yan: YNT: nxn kare simülasyon

ozcan kasal ozcankasal at yahoo.com
12 Tem 2009 Paz 16:48:32 EEST


> Daha büyük boyutları da yapabilirsiniz
> bir satır çarpımının çift olduğunu bulmak için
> çarpma yapmaya gerek yok
> satır veya sütun içinde en az bir çift sayının
> geçmesi yeterli
> yani çarpım önemli değil
> önemli olan çarpıma giren tek tek elemanlar
> benim şu ara keyfim yok
> bir de sizin hazır algoritmanız var
> küçük bir iki değişiklikle
> daha büyük boyutlar için çalışır hale getirirsiniz
> kolay gelsin
>  
> Kadir Güleç


Haklısınız, kodu girerken beynim sulanmış. 15'e kadar test ettim. sonuçlar şöyle,

3 x 3 : 0.359664033597
4 x 4 : 0.703529647035
5 x 5 : 0.774822517748
6 x 6 : 0.89101089891
7 x 7 : 0.926807319268
8 x 8 : 0.962703729627
9 x 9 : 0.977102289771
10 x 10 : 0.987901209879
11 x 11 : 0.992300769923
12 x 12 : 0.997500249975
13 x 13 : 0.998700129987
14 x 14 : 0.999200079992
15 x 15 : 0.999400059994

kod şöyle

%%%%%%%%%%%%%%%%%%%%%%%%%%-Pyhton 2.6.1-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

from __future__ import division

import random

def secim(n):
    s=[random.randint(1,n*n)]
    i=1
    while i<=n*n-1:
        s.append(0)
        i=i+1
      
    j=1
    while j<=n*n-1:
        k=0
        while k==0:
            r=random.randint(1,n*n)
            k=1
            for i in range(0,j):
                if r==s[i]:
                    k=0
            if k==1:
                s[j]=r        
        j=j+1


    return s


def cift(n):
    result=1
    m=secim(n)

    r=[1]
    c=[1]
    i=1
    j=1
    while i<=n-1:
        r.append(1)
        i=i+1
    while j<=n-1:
        c.append(1)
        j=j+1
    l=0
    p=0
    while l<=n-1:
        j=l*n
        while j<=(l+1)*n-1:
            if m[j]%2==0:
                r[l]=0
            j=j+1
        l=l+1

    while p<=n-1:
        j=p
        while j<=p+(n-1)*n:
            if m[j]%2==0:
                c[p]=0
            j=j+n
        p=p+1

    result=0
    i=0
    j=0
    while i<=n-1:
        if r[i]%2==1:
            result=1
        i=i+1
    while j<=n-1:
        if c[j]%2==1:
            result=1
        j=j+1
    return result



dim=15
number=10000



while dim<=15:
    deneme=0
    dogru=0
    while deneme <=number:
        k=cift(dim)
        if k==0:
            dogru=dogru+1
        deneme=deneme+1    
    print dim,"x",dim,":", dogru/deneme
    dim=dim+1

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





      ___________________________________________________________________
Yahoo! Türkiye açıldı!  http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!


MD-sorular mesaj listesiyle ilgili daha fazla bilgi