✍️ مسئله مجموع دو عدد میپرسد آیا دو خانه متفاوت وجود دارند که جمع مقدارشان هدف شود. متفاوت بودن خانهها مهمتر از متفاوت بودن مقدارهاست. دو عدد پنج در دو خانه میتوانند ده بسازند، اما یک پنج تنها نمیتواند دوبار مصرف شود. برای شروع، یک راهحل ساده با دو حلقه میسازیم تا همین قرارداد روشن بماند.
مثلاً در [2, 6, 9] هدف هشت با خانههای صفر و یک ساخته میشود. هدف دوازده پیدا نمیشود؛ هرچند شش بهاضافه خودش دوازده است، فقط یک خانه با مقدار شش داریم. کد اولیه حلقه داخلی را از خود i آغاز کرده و به همین دلیل زوج خودی را هم میپذیرد.
محدوده حلقه دوم را اصلاح کن تا همیشه j > i باشد. در این فعالیت فقط وجود یا نبود زوج مهم است و خروجی باید بولی باشد، نه خود عددها یا شاخصها. خطای رایج، رد کردن مقدارهای برابر بهجای شاخصهای برابر است؛ آن اصلاح اشتباه، زوج معتبر [5,5] را هم حذف میکند. این نسخه پایه درجه دوم است و در گام بعد به کمک دیکشنری آن را سریعتر میکنیم.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع has_pair(nums,target) فهرست اعداد صحیح و هدف صحیح میگیرد و برای وجود دو شاخص متفاوت i<j با جمع هدف True، وگرنه False برمیگرداند. خالی و تکعضوی False؛ مقدارهای برابر در دو خانه مجازند. has_pair([5],10)=False و has_pair([5,5],10)=True. ورودی را تغییر نده. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.