راه
۸ کیو· خیلی سادهمبتدیPYTHON۴ ثانیه · ۲۵۶ مگابایت

تابع ترکیب (Combination)

در این تمرین، وظیفه‌ی شما پیاده‌سازی تابعی به نام comb در پایتون است. این تابع باید دو ورودی دریافت کند:

  • n: عدد حسابی اول
  • k: عدد حسابی دوم

و مقدار ترکیب C(n, k) (که به آن انتخاب k از n نیز گفته می‌شود) را به‌عنوان خروجی برگرداند.

C(n, k) = n! / (k! × (n-k)!)

تضمین می‌شود که ورودی‌ها در 0 ≤ k, n ≤ 20 صدق می‌کنند.


🎯 مثال

برای این‌که بهتر متوجه شوید که چه انتظاری از تابع comb می‌رود، مثال‌های زیر را در نظر بگیرید. اگر تابع comb را با ورودی‌های زیر صدا بزنید، باید خروجی‌های نشان‌داده‌شده را برگرداند:

python
>>> comb(5, 3)
10
>>> comb(10, 0)
1
>>> comb(10, 2)
45
>>> comb(5, 7)
0

⚠️ نکته‌ی مهم

در این تمرین نیازی به دریافت ورودی از کاربر یا چاپ خروجی در کنسول ندارید و باید خروجی را برگردانید (return کنید). تمرکز شما فقط بر پیاده‌سازی دقیق توابع و منطق موردنیاز طبق شرح تمرین است. سیستم داوری به طور خودکار تابع comb شما را با ورودی‌های مختلف تست کرده و خروجی آن را بررسی می‌کند.


💡 راهنمایی

برای پیاده‌سازی تابع comb، می‌توانید از روش‌های زیر استفاده کنید:

روش ۱: استفاده از فرمول فاکتوریل

python
def factorial(x):
    if x == 0 or x == 1:
        return 1
    result = 1
    for i in range(2, x + 1):
        result *= i
    return result

def comb(n, k):
    if k > n:
        return 0
    return factorial(n) // (factorial(k) * factorial(n - k))

روش ۲: پیاده‌سازی مستقیم با حلقه

python
def comb(n, k):
    if k > n:
        return 0
    if k == 0 or k == n:
        return 1
    k = min(k, n - k)
    result = 1
    for i in range(1, k + 1):
        result = result * (n - k + i) // i
    return result

روش دوم کارآمدتر است زیرا از محاسبه‌ی فاکتوریل کامل جلوگیری می‌کند و با استفاده از ویژگی C(n, k) = C(n, n-k)، محاسبات را بهینه‌تر انجام می‌دهد.

✅ این تمرین را در ویرایشگر خود پیاده‌سازی کنید و با ورودی‌های مختلف تست کنید. به یاد داشته باشید که تابع باید مقدار را برگرداند (return)، نه چاپ کند!

نمونه‌ها

ورودی نمونه ۱
comb(5, 3)
comb(10, 0)
comb(10, 2)
comb(5, 7)
خروجی نمونه ۱
10
1
45
0
ورودی نمونه ۲
comb(3, 2)
comb(3, 0)
comb(3, 4)
type(comb(1, 1)).__name__ in ("int", "float")
خروجی نمونه ۲
3
1
0
True
ورودی نمونه ۳
[comb(20, 10), comb(0, 0), comb(20, 20), comb(1, 0)]
خروجی نمونه ۳
[184756, 1, 1, 1]

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود