🧮 تمرین عدد کاپرکار (Kaprekar)
حل مسئله با پایتون — فقط با دستورات for, if, else, list, sum, len
۴- عدد کاپرکار
یک عدد چهار رقمی در نظر بگیرید. با این ارقام بزرگترین و کوچکترین اعداد ممکن را بسازید و عدد بزرگ را منهای عدد کوچک کنید. روی عدد حاصل عملیات خط قبل را تکرار کنید. برای بسیاری از اعداد بعد از مدتی به ۶۱۷۴ میرسید!
⚡ با در نظر گرفتن متغیرهای لازم حل کنید!
📌 فقط با دستورات for, if, else, list, sum, len و متدهای لیست — بدون def
📌 فقط با دستورات for, if, else, list, sum, len و متدهای لیست — بدون def
مثال
برای ۳۵۲۴ رویه به این ترتیب میباشد:
K₁₀(۳۵۲۴) = ۵۴۳۲ − ۲۳۴۵ = ۳۰۸۷
K₁₀(۳۰۸۷) = ۸۷۳۰ − ۳۷۸ = ۸۳۵۲
K₁₀(۸۳۵۲) = ۸۵۳۲ − ۲۳۵۸ = ۶۱۷۴
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))
نتایج آماری
✅ رسیده به ۶۱۷۴
۹۹۹۰
عدد چهار رقمی
(به جز ۱۰ عدد تکراری)
❌ نرسیده به ۶۱۷۴
۱۰
عدد چهار رقمی
مثل ۱۱۱۱، ۲۲۲۲، …
