🎯 تفکر الگوریتمی

الگوریتم حدس و بررسی: مجذور کامل

۳ گام

حدس بزن، بررسی کن

چطور ریشهٔ دوم را تعریف می‌کنیم؟ «g ریشهٔ دوم x است اگر g * g == x». این تعریف نمی‌گوید جواب را چطور پیدا کنیم، ولی می‌گوید یک حدس را چطور بررسی کنیم. پس حدس‌ها را به‌ترتیب تولید می‌کنیم و هر کدام را چک می‌کنیم:

n = int(input())
g = 0
while g * g < n:
    g = g + 1

این حلقه روی اولین g که مجذورش کمتر نیست می‌ایستد. بعد از حلقه باید دقیق بررسی کنیم که آیا همان جواب درست بود یا از آن رد شده‌ایم:

if g * g == n:
    print(f"{n} is a perfect square")
else:
    print(f"{n} is not a perfect square")

این الگو حدس و بررسی (یا جست‌وجوی جامع) نام دارد: همهٔ حالت‌های ممکن را یکی‌یکی امتحان می‌کنیم. ساده است و اگر جواب وجود داشته باشد، حتماً پیدایش می‌کند؛ عیبش کندی برای فضای جست‌وجوی بزرگ است.

سه ویژگی متغیر حلقه را اینجا هم می‌بینی: g بیرون حلقه مقدار گرفته، داخلش زیاد می‌شود و شرط پایان بر اساس آن است. درس کامل حدس و بررسی با مثال ریشهٔ سوم (و اعداد منفی) را ببین.

  1. ۱گام ۱

    عدد را با input() بگیر، به عدد صحیح تبدیل کن و در متغیر n بگذار: n = int(input()).

    ورودی آزمایشی 49 است.

  2. ۲گام ۲

    حالا حلقهٔ حدس‌زدن را بنویس: از حدس g = 0 شروع کن و تا وقتی g * g هنوز از n کمتر است، یکی‌یکی جلو برو (g = g + 1).

    بعد از حلقه مقدار g را چاپ کن. برای 49 باید 7 چاپ شود: اولین عددی که مجذورش از ۴۹ کمتر نیست.

  3. ۳گام ۳

    صبر کن! برای 50، حلقه روی 8 می‌ایستد، ولی 8×8 برابر 50 نیست؛ 50 مجذور کامل نیست. حلقه فقط می‌گوید «از حدس رد شدیم»، نه اینکه جواب دقیق پیدا شده.

    خط print(g) را پاک کن و به‌جایش بررسی کن: اگر g * g == n بود، متن n is a perfect square را چاپ کن (با f-string، مثلاً برای 49: 49 is a perfect square)؛ وگرنه متن n is not a perfect square.

در حال آماده‌سازی ویرایشگر…