Processing math: 100%
Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
934 kez görüntülendi

Soru: x,y,z,t,n doğal sayıları (negatif olmayan tam sayıları) verildiğinde ix, jy, kz, vt 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 Çö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 | 934 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 a1 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,328 soru
21,885 cevap
73,615 yorum
2,975,610 kullanıcı