این برنامه پایتونی بررسی میکند که چگونه میتوان یک اسکان ۱۰۰۰ آزمونی را با استفاده از واحدهای ۵۰۰، ۱۰۰۰ و ۲۰۰۰ آزمونی خرد کرد، بهطوریکه از هر نوع واحد حداقل یکی استفاده شود.
هدف یافتن تمام ترکیبهای ممکن است که مجموع آنها دقیقاً برابر با ۱۰۰۰ باشد و هیچ نوع واحدی حذف نشده باشد.
target = 1000
ways = []
# بررسی تمام ترکیبهای ممکن
for a in range(1, target // 500 + 1): # حداقل یک واحد 500
for b in range(1, target // 1000 + 1): # حداقل یک واحد 1000
for c in range(1, target // 2000 + 1): # حداقل یک واحد 2000
total = a * 500 + b * 1000 + c * 2000
if total == target:
ways.append((a, b, c))
# نمایش خروجی
print(f"تعداد روشهای ممکن: {len(ways)}")
for i, (a, b, c) in enumerate(ways, 1):
print(f"روش {i}: ۵۰۰×{a} + ۱۰۰۰×{b} + ۲۰۰۰×{c}")
تعداد روشهای ممکن: 1
روش 1: ۵۰۰×1 + ۱۰۰۰×0 + ۲۰۰۰×0 ← رد میشود چون از همه نوع استفاده نشده
(در این نسخه فقط ترکیبهایی پذیرفته میشوند که a ≥ 1, b ≥ 1, c ≥ 1)
- حلقهها تعداد واحدهای ۵۰۰، ۱۰۰۰ و ۲۰۰۰ را بررسی میکنند
- شرط total == 1000 بررسی میکند که مجموع دقیقاً برابر با ۱۰۰۰ باشد
- شرطهای range(1, ...) تضمین میکنند که از هر نوع حداقل یک واحد استفاده شده باشد
- تمام ترکیبهای معتبر در لیست ways ذخیره و سپس چاپ میشوند