C++ Da Kombinasyon İşlemi
-
ltcelik bunu yazdı:
-----------------------------Sonuçta bir matematik formülünün uygulanmasıyla sonuca gidilmiş güzel ...
Fakat Formüle daynmayan sezgisel bir yöntem nasıl tasarlanır onun üzerinde de biraz düşünsek...
Yani yine 5 elemanlı bir kümenin 2 elemanlı alt kümelerini oluşturtsak ve ancak "şu" kadar alt kümeninin olabileceğine
Programın karar vermesini nasıl sağlayabilirz?
----------------------------alt kume hesaplama olayını recursion kullanarak yapabilirsin ama arkadas daha baslangıc seviyesinde bir kod istiyo o yuzden en basiti bu formulu uygulamak olur
-
ramses bunu yazdı:
-----------------------------manyaki bunu yazdı:
-----------------------------bu iki fonksionu int main de kullanarak yapabilirsin hocam kodları bi incele
int faktoriyel(int a)
{
int fakt=1;
int r=1;
while( r
fakt=fakt*r;
r=r+1;
}
return fakt;
}
int kombinasyon(int a,int b)
{
return faktoriyel(a)/(faktoriyel(a-b) * faktoriyel(b));
}
-----------------------------ben de yazıyım bi faydam olsun diye girmistim ama adam cok guzel ve acık yazmıs gayet..
-----------------------------
Direk formülü uygulamak adına güzel ancak büyük sayılar girilirse gereğinden fazla sayıda işlem yapar bu algoritma. Onun yerine şöyle bi şeyler uydurdum: http://slexy.org/raw/s2UpncS8hakodu direk buraya yapıştırmadım kayıyo yamuluyo falan diye. O linkte tertemiz koddan başka bi şey de yok, kopyala yapıştur sonra Compile&Run :)
-
Genellikle kaynaklarda fkatöriyel hesabında döngü 1 den başlayıp Ne kadar yürütülyor
Bunun yerine N'den başlatılıp R ye kadar sürdürlen bir döngü tanımlanırsa hem N!/R! faktöriyel hem de R=1 için N! hesaplayan bir kodumuz olur
Bunu da Faktor(N,R) fonksiyonu olarak tanımlarsak daha basit bir kod ortaya çıkar
int fakto(int n,r)// aslında burası zaten n!/r! i hesaplar, r=1 ya da 0 için n! i hesaplamış oluruz
{
i=1
int fakto=1;
for (i=n;n>r;i--){ fakto=fakto*i}
return fakto;
}
