تمرین عدد کاپرکار – حل با پایتون


🧮 تمرین عدد کاپرکار (Kaprekar)

حل مسئله با پایتون — فقط با دستورات for, if, else, list, sum, len

۴- عدد کاپرکار

یک عدد چهار رقمی در نظر بگیرید. با این ارقام بزرگ‌ترین و کوچک‌ترین اعداد ممکن را بسازید و عدد بزرگ را منهای عدد کوچک کنید. روی عدد حاصل عملیات خط قبل را تکرار کنید. برای بسیاری از اعداد بعد از مدتی به ۶۱۷۴ می‌رسید!

⚡ با در نظر گرفتن متغیرهای لازم حل کنید!
📌 فقط با دستورات for, if, else, list, sum, len و متدهای لیست — بدون def

مثال

برای ۳۵۲۴ رویه به این ترتیب می‌باشد:

K₁₀(۳۵۲۴) = ۵۴۳۲ − ۲۳۴۵ = ۳۰۸۷
K₁₀(۳۰۸۷) = ۸۷۳۰ − ۳۷۸ = ۸۳۵۲
K₁₀(۸۳۵۲) = ۸۵۳۲ − ۲۳۵۸ = ۶۱۷۴
K₁₀(۶۱۷۴) = ۷۶۴۱ − ۱۴۶۷ = ۶۱۷۴

🎯 هدف: بررسی کنید برای چه اعدادی به ۶۱۷۴ می‌رسید و برای چه اعدادی نمی‌رسید. نتیجه را در دو لیست ذخیره کنید.

کد پایتون

🐍 کد حل مسئله عدد کاپرکار
# دریافت عدد چهار رقمی از کاربر
num = int(input("یک عدد چهار رقمی وارد کنید: "))

# لیست برای اعدادی که به ۶۱۷۴ می‌رسند و نمی‌رسند
reach_6174 = []
not_reach_6174 = []

# حلقه برای بررسی اعداد از ۱۰۰۰ تا ۹۹۹۹
for test_num in range(1000, 10000):
    current = test_num
    seen = []  # لیست برای ذخیره اعداد دیده شده
    reached = False

    while True:
        # تبدیل عدد به لیست ارقام
        digits = []
        temp = current
        for i in range(4):
            digits.append(temp % 10)
            temp = temp // 10

        # مرتب‌سازی صعودی برای کوچک‌ترین عدد
        for i in range(len(digits)):
            for j in range(i + 1, len(digits)):
                if digits[i] > digits[j]:
                    digits[i], digits[j] = digits[j], digits[i]

        smallest = 0
        for i in range(len(digits)):
            smallest = smallest * 10 + digits[i]

        # مرتب‌سازی نزولی برای بزرگ‌ترین عدد
        for i in range(len(digits)):
            for j in range(i + 1, len(digits)):
                if digits[i] < digits[j]:
                    digits[i], digits[j] = digits[j], digits[i]

        largest = 0
        for i in range(len(digits)):
            largest = largest * 10 + digits[i]

        new_num = largest - smallest

        if new_num == 6174:
            reached = True
            break

        if new_num in seen:
            break

        seen.append(new_num)
        current = new_num

    if reached:
        reach_6174.append(test_num)
    else:
        not_reach_6174.append(test_num)

# نمایش نتایج
print("اعدادی که به ۶۱۷۴ می‌رسند:", reach_6174)
print("تعداد:", len(reach_6174))
print("\nاعدادی که به ۶۱۷۴ نمی‌رسند:", not_reach_6174)
print("تعداد:", len(not_reach_6174))

نتایج آماری

✅ رسیده به ۶۱۷۴

۹۹۹۰
عدد چهار رقمی
(به جز ۱۰ عدد تکراری)

❌ نرسیده به ۶۱۷۴

۱۰
عدد چهار رقمی
مثل ۱۱۱۱، ۲۲۲۲، …


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *