Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
743 kez görüntülendi

Soru: $x, y, z, t, n$ doğal sayıları (negatif olmayan tam sayıları) verildiğinde $i \leq x$, $j \leq y$, $k \leq z$, $v \leq t $ kısıtlayıcı şartı altında $$i + 2j + 3k + 4v = n$$ denklemini sağlayan $(i, j, k, v)$ doğal sayı dörtlülerinin sayısını ve çözüm kümesini veren Python 3.9 programını yazınız.

 

Açıklamalar: $x, y, z, t, n$ girdileri (başlangıç verilenleri) için

x = int(input())

y = int(input())

z = int(input())

t = int(input())

n = int(input())

kodlarını kullanabilirsiniz. Örneğin $x=3, y = 3, z= 2, t = 1, n = 12$ girdileri için $i + 2j + 3k + 4v = 12$ denkleminin verilen özelliklerdeki çözüm sayısı $8$ olur. Ayrıca $$\text{Çözüm Kümesi} = \{(2, 3, 0, 1), (1, 2, 1, 1), (0, 1, 2, 1), (0, 3, 2, 0), (3, 1, 1, 1), (2, 2, 2, 0), (2, 0, 2, 1), (3, 3, 1, 0) \}$$ olur.

Veri Bilimi kategorisinde (2.6k puan) tarafından 
tarafından yeniden kategorilendirildi | 743 kez görüntülendi

2 Cevaplar

1 beğenilme 0 beğenilmeme
En İyi Cevap

Eminim daha verimli bir yontemi vardir ama kaba kuvvetle soyle bir cozumum var. (@lokman.gokce nin uyarisi uzerine listenin uzunlugunu da hesaplayan kod paylasiyorum. Bunu yapmak icin decorator kullandik. Gereksiz ama hos bir yontem gostermek istedim)

def decorator(fonksiyon):
   def ara_fonksiyon(*argumanlar):
       sonuc = fonksiyon(*argumanlar)
       return (len(sonuc),sonuc)
   return ara_fonksiyon


@decorator
def hesapla(x,y,z,v,n,a1=1,a2=2,a3=3,a4=4):
    return [(a,b,c,d) for a in range(0,x+1) 
                      for b in range(0,y+1) 
                      for c in range(0,z+1) 
                      for d in range(0,v+1)
                         if a*a1+b*a2+c*a3+d*a4==n ]

hesapla(3,3,2,1,12)

#
# SONUC
#
#  (8, [ (0, 1, 2, 1), 
#        (0, 3, 2, 0),
#        (1, 2, 1, 1), 
#        (2, 0, 2, 1), 
#        (2, 2, 2, 0), 
#        (2, 3, 0, 1), 
#        (3, 1, 1, 1),
#        (3, 3, 1, 0)]

Burada pythonin list-comprehension sentaksini kullandik. Matematikte kume semasi gibi isliyorlar. Bunun disinda hesapla fonksiyonunu tanimlarken $x,y,z,v$ limitleri ve $n$ disinda $a_1$ gibi girdiler verdik ve bunlari belli bir sayiya esitledik (denklemdeki katsayilara). Bu sayede yazdigimiz fonksiyonu baska denklemleri cozmesi icin de kullanabiliriz.

hesapla(3,3,2,1,12,2,3,4,10)  ## veya hesapla(3,3,2,1,12,a1=2,a2=3,a3=4,a4=10) 

#[(1, 0, 0, 1),
# (1, 2, 1, 0),
# (2, 0, 2, 0),
# (3, 2, 0, 0)]

 

(1.6k puan) tarafından 
tarafından düzenlendi
Çözüm için teşekkürler. Küçük bir düzeltme vereceğim: hesapla(33,2,1,12) yazan kod hesapla(3,3,2,1,12) şeklinde olmalıdır. (Virgül eksik kalmış.) Çözüm kümesinin eleman sayısı da isteniyor. Kümenin eleman sayısını hesaplatan kodu da eklersek tamamdır.
haklisiniz hemen duzeltiyorum
Python dilinde Decorator konsepti nedir?
1 beğenilme 0 beğenilmeme

Çözüm 2: Ben de list-comprehension ile ilerledim. Google Colab'da çalıştırıp keyfi girdiler ile test edilebilir:

# i < x + 1, j < y + 1, k < z + 1, v < t + 1 kısıtlayıcı şartı altında 
# i + 2j + 3k + 4v = n denklemini sağlayan (i, j, k, v) doğal sayı dörtlülerinin sayısının bulunması:
x = int(input())
y = int(input())
z = int(input())
t = int(input())
n = int(input())
quadruples = { (i,j,k,v) for i in range(x+1) for j in range(y+1) for k in range(z+1) for v in range(t+1) if i+ 2*j + 3*k + 4*v == n }
print("i + 2j + 3k + 4v = n  denkleminin verilen özelliklerdeki çözüm sayısı {} olur.".format(len(quadruples)))
print("Çözüm Kümesi = {}'dir.".format(quadruples))

 

(2.6k puan) tarafından 
tarafından düzenlendi
ikimiz de kaba kuvvet kullanarak cozmusuz, bu sorunun daha guzel bir cozumu var midir acaba ?
20,282 soru
21,821 cevap
73,503 yorum
2,521,750 kullanıcı