Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
1.3k kez görüntülendi
Rakamları toplamı K olan N basamaklı kaç adet sayı vardır?
Oluşan sayıların doğal sayı olması gerekmiyor. Yani sayının başında sıfır olabilir. K'nın 10 dan küçük olduğu durumlarda aşağıdaki bilgisayar kodu işime yarıyor (Tekrarlı Permütasyon)
  • Örneğin 005, 072, 6097, 0001, 0101 sayılarını kabul ediyoruz.
// f fonksiyonu faktoriyeli ifade etmekte
def tekPer(K,N):
return f(K+N-1) / (f(K) * f(N-1))

Ancak K sayısı 9 dan büyük olduğunda tekrarlı permütasyon işime yaramıyor çünkü sayılarımız 10'luk tabanda ve örneğin K = 15, N = 3 dediğimiz durumda 5/8/2 geçerli bir olasılık iken 0/13/2 geçersizdir. Çünkü 13 diye bir rakam yok.

Bu soruyu formulize edip bilgisayar kodunu yazmam gerekiyor. İhtiyacım olan matematiksel olarak oluşturulmuş genel bir formül.

Örnek olması açısından bilgisayara saydırdığım sonuçlar:
  • K = 15, N = 4 iken cevap 592
  • K = 10, N = 6 iken cevap 2997
  • K = 5 , N = 7 iken cevap 462 (formül de doğruluyor)
  • K = 23, N = 5 iken cevap 6000


Şimdiden cevaplarınız için teşekkür ederim.
Serbest kategorisinde (11 puan) tarafından  | 1.3k kez görüntülendi
Fevzi-omer@outlook.com   Kodları bana gönderebilirmisiniz? Bunları sanırım c++ dan yazdınız. 


Girdi olarak k ve n alınmış olduğunu farzediyorum. K yı elde edebilmek için n sayısını oluşturabilecek rakamları bulmam gerek. Bunu da for döngüleriyle bulabilirim. Bulduğum sayıları iç içe yeni bir for döngüsüne koyar oluşabilecek sayıları sayabilirim.

İnteger veya float kullanmamalısınız. 
Not: kod parçacığından anlayamadım ama recursive fonksiyon işleri karıştırabilir.

Sanırım bilgisayar olimpiyatlarına hazırlanıyorsunuz. Bilgisayarım kırık olmasa kodları yazar gönderirdim. kodları gönderebilirmisiniz?

Bahsettiğiniz türde bir sorunun iki farklı çözüm yolunu burada sunmuştum. Genel olarak, dağılım prensibi ve içerme dışarma prensibi kullanarak bu tür problemleri çözebiliyoruz.
20,200 soru
21,728 cevap
73,275 yorum
1,887,921 kullanıcı