HW 2.pdf

‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫دمرس‪:‬‬
‫حق‬
‫علیرضا رطقی یقت‬
‫رطاح تمرین‪:‬‬
‫علیرضا خادمی‬
‫‪1‬‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫به نکات زیر حتما دقت کنید‪:‬‬
‫‪ ‬موعد تحویل تمرین تمدید نخواهد شد‪.‬‬
‫‪ ‬قطع بودن اینترنت منزل یا خوابگاه‪ ،‬کندی سرعت اینترنت‪ ،‬عدم وقت و ‪ ...‬هیچ کدام‬
‫دلیل موجهی برای تاخیر نیستند‪ .‬سعی کنید چند ساعت زودتر از مهلت تعیین شده‬
‫اقدام به ارسال پاسخ خود کنید که بتوانید این مشکالت را حل کنید‪.‬‬
‫‪ ‬تذکر ‪ :‬به برنامه های مشابه نمره منفی تعلق خواهد گرفت‪ .‬بنابراین اکیدا توصیه می شود‬
‫که هر دانشجو برنامه خود را به تنهایی نوشته و حتی االمکان دارای الگوریتم‪ ،‬کد و نحوه‬
‫پیاده سازی متفاوتی باشد (اولین تقلب‪ :‬دو نمره منفی‪ ،‬دومین تقلب‪ ۹ :‬نمره منفی‪،‬‬
‫سومین تقلب‪ :‬عدم قبولی در درس)‪.‬‬
‫‪ ‬زمان تحویل حضوری تمرین بعد از مهلت ارسال آن خواهد بود و به زودی اعالم خواهد‬
‫شد‪.‬‬
‫‪ ‬سواالت خود را در صفحه درس برنامه نویسی در سایت ‪ piazza.com‬به آدرس زیر‬
‫مطرح کنید‪:‬‬
‫‪ https://piazza.com/sharif/fall2015/ce1531213/home/‬‬
‫‪ ‬برای آپلود تمرین ها به سایت ‪ Quera.ir‬مراجعه کرده و مطابق با دستورالعمل‪،‬‬
‫تمرینهای خود را آپلود کنید‪.‬‬
‫‪( ‬دستورالعمل آپلود تمرین ها‪ ،‬در صفحه درس و سایت ‪ piazza‬موجود می باشد)‬
‫آخرین مهلت ارسال تمرین‪:‬‬
‫تا پایان روز ‪ 22‬آبان (ساعت ‪)22‬‬
‫‪2‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫سوال اول ‪ :‬ترور‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫تعدادی جنایتکار که قرار است توسط تیراندازهایی ترور شوند در یک ردیف میایستند ‪ ،‬سپس برای هر تیر انداز بازه‬
‫ای مشخص می شود و او جنایتکارهای موجود در آن بازه را ترور میکند ‪ .‬دکترهایی هم موجودند که بعد از ترور بازه‬
‫ای به هرکدام داده میشود و جنایتکارهای ترور شده در آن بازه را درمان می کنند تا زنده بمانند ‪.‬‬
‫برنامه ای بنویسید که پس از ترور جنایتکارها شماره جنایتکارهایی که زنده ماندهاند را بدهد ‪:‬‬
‫‪‬‬
‫برنامه شما باید ابتدا تعداد جنایتکار ها را بگیرد ‪ ،‬سپس تعداد تیراندازها را بگیرد و به ازای هر تیرانداز یک‬
‫بازه بگیرد ‪ ،‬بعد تعداد دکتر ها و سپس به ازای هر دکتر نیز یک بازه بگیرد و به عنوان خروجی مکان ایستادن‬
‫جنایتکارهای که زنده هستند را بدهد ‪.‬‬
‫‪‬‬
‫شماره گذاری جایگاه جنایتکاران از ‪ 0‬تا ‪ n-1‬میباشد ‪ ( .‬تعداد جنایتکاران = ‪) n‬‬
‫‪Sample Input‬‬
‫‪Sample Output‬‬
‫‪4‬‬
‫‪2‬‬
‫‪0 1‬‬
‫‪2 3‬‬
‫‪1‬‬
‫‪2 3‬‬
‫‪2 3‬‬
‫‪Sample Input‬‬
‫‪Sample Output‬‬
‫‪0 1 2 4 5‬‬
‫‪1‬‬
‫‪4‬‬
‫‪2‬‬
‫‪5‬‬
‫‪3‬‬
‫‪6‬‬
‫‪2‬‬
‫‪0‬‬
‫‪3‬‬
‫‪2‬‬
‫‪0‬‬
‫‪4‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫سوال دوم ‪ :‬الگوریتم‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫در این سوال قرار است الگوریتمی پیاده سازی کنید که قابلیت درج ‪ ،‬حذف و پیدا کردن مجموع دنباله ای از اعداد‬
‫‪ a1 , a2 , … , an‬را داشته باشد ‪.‬‬
‫ورودی مسئله ‪ :‬در خط اول عدد ‪ m‬تعداد عملیاتی که قرار است انجام شود آمده است و در ‪ m‬خط بعدی به ترتیب‬
‫تعدادی دستور آمدهاند که بدین صورت هستند ‪:‬‬
‫)‪ insert(x,i‬عدد ‪ x‬را در مکان ‪ i‬ام دنباله ی اعداد درج میکند ‪.‬‬
‫)‪ delete(i‬عضو ‪ i‬ام از دنباله اعداد را در صورت وجود حذف میکند ‪.‬‬
‫)‪ sum(i,j‬مجموع اعداد ‪ ai + ai+1 + … + aj‬را محاسبه و در خروجی چاپ میکند ‪.‬‬
‫‪Sample Input‬‬
‫‪Sample Output‬‬
‫‪8‬‬
‫)‪insert(5,1‬‬
‫)‪insert(10,1‬‬
‫)‪insert(7,2‬‬
‫)‪sum(1,2‬‬
‫)‪insert(4,3‬‬
‫)‪delete(2‬‬
‫)‪sum(1,2‬‬
‫)‪sum(2,3‬‬
‫‪17‬‬
‫‪14‬‬
‫‪9‬‬
‫توضیح مثال باال ‪ :‬دقت کنید بعد از اجرای هر دستور )‪ sum(i,j‬یکی از اعداد خروجی چاپ میشود ‪ .‬ابتدا یک عدد به‬
‫عنوان مثال ‪ 8‬را از ورودی دریافت کرده و سپس ‪ 8‬ورودی دیگر دریافت میکند ‪.‬‬
‫‪4‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫سوال سوم ‪ :‬بازگشتی‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫قلی ‪ ،‬بعد از این همه تمرین سخت در درس برنامه ویسی خسته شده و تصمیم گرفته تا به سراغ بازی با ریاضی های‬
‫کتاب های دبیرستان برود ‪ ،‬در کتاب "ریاضی قلوی ‪ "1‬یک بازی با ریاضی به صورت زیر هست ‪:‬‬
‫امتیاز شما در ابتدای کار ‪ 0‬است ‪ .‬تعداد ‪ 2n‬عدد روی یک نوار نوشته شدهاست ‪ .‬شما در هر مرحله باید نوار را به دو‬
‫قسمت مساوی تقسیم کرده و یک قسمت را دور بریزید و بیشترین عدد از قسمت دور ریخته شده را به امتیاز خود‬
‫اضافه کنید ‪ .‬این کار را باید اینقدر ادامه دهید تا یک عدد بیشتر باقی نماند که آن عدد هم به امتیاز شما اضافه میشود‪.‬‬
‫مثال ‪ ( :‬فقط نحوه کار توضیح داده شدهاست و به معنی درست بودن جواب نمیباشد ! )‬
‫‪point : 0‬‬
‫‪12 11 9 2 10 8 2 1‬‬
‫‪10 8 2 1‬‬
‫‪point : 12‬‬
‫‪point : 14‬‬
‫‪10 8‬‬
‫‪point : 24‬‬
‫‪8‬‬
‫‪Final point : 32‬‬
‫قلی منتظر است تا شما برنامه ای بنویسید که با گرفتن اعداد از ورودی ‪ ،‬به او بگوید که حداکثر امتیازی که می تواند‬
‫کسب کند ‪ ،‬چقدر است ‪.‬‬
‫‪Sample Input‬‬
‫‪12 11 9 2 10 8 2 1‬‬
‫‪Sample Output‬‬
‫‪42‬‬
‫تذکر ‪ : 1‬اعداد در ورودی با یک ‪ Space‬از یکدیگر فاصله دارند ‪.‬‬
‫تذکر ‪ : 2‬استفاده از تابع ) (‪ max‬مجاز نمی باشد و درصورت نیاز باید تابع آن را بنویسید ‪.‬‬
‫تذکر ‪ : 3‬برای حل سوال فقط استفاده از تابع بازگشتی مجاز است و استفاده از هر روش حل دیگر نمره ای نخواهد‬
‫داشت ‪.‬‬
‫‪5‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫سوال چهارم ‪ :‬دنباله متوازن‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫علی میخواهد یک دنباله متوازن از پرانتزها را وارد رایانه جدید خود کند ‪ ،‬اما او که به دلیل حساسیت پوستی به هوای‬
‫آلوده تهران ‪ ،‬همواره مجبور است از دستکش استفاده کند ‪ ،‬در هنگام استفاده از کیبورد و تایپ کردن این دنباله مشکل‬
‫دارد و گاهاً پرانتزها را جابهجا و یا اشتباه وارد می کند ‪ .‬قرار است به او کمک کنید تا حداقل تعداد پرانتز هایی را که‬
‫باید تغییر کنند تا دنباله متوازن شود بیابد ‪ .‬منظور از تغییر یک پرانتز عوض کردن "(" با ")" ویا برعکس است ‪.‬‬
‫دنباله متوازن به دنبالهای گفته میشود که تعداد "(" ها و ")" در آن برابر باشد ‪ .‬همچنین در هر پیشوند از این دنباله‬
‫تعداد ")" ها حداقل به اندازه تعداد "(" ها باشد ‪.‬‬
‫ورودی‬
‫‪‬‬
‫یک رشته از پرانتز ها به طول زوج‬
‫خروجی‬
‫‪‬‬
‫حداقل تعداد پرانتزهایی که باید تغییر کنند تا دنباله متوازن شود را چاپ کنید ‪.‬‬
‫‪Sample Input‬‬
‫‪Sample Output‬‬
‫‪2‬‬
‫‪1‬‬
‫())(‬
‫)()()))(())((()()())‬
‫‪6‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫سوال امتیازی ‪ :‬خاک برداری‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫( ‪ 20‬نمره )‬
‫فرزام از بچگی به گل و گیاه عالقه داشت و به همین سبب حاال که بزرگ شدهاست ‪ ،‬در حیاط باغچه خود گلدان های‬
‫متعدد و زیادی دارد ‪ .‬او سال ها پیش که میخواست گل های خود را در این گلدان ها بکارد ‪ ،‬در هر یک از گلدان ها‬
‫مقدار مشخصی خاک ریخت اما اکنون پس از گذشت چند سال ‪ ،‬مقدار خاک مورد نیاز این گل ها تغییر کردهاست ‪.‬‬
‫با توجه به متفاوت بودن گل های گلدان های مختلف ‪ ،‬مقدار خاک مورد نیاز آن ها هم متفاوت است ‪ .‬برخی از گل ها‬
‫در طی این چند سال نیازشان به خاک افزایش یافته ‪ ،‬اما برخی نیز ممکن است نیاز آن ها کاهش یافته باشد ‪.‬‬
‫فرض کنید ‪ ،‬گلدان ها با شماره های ‪ 1‬تا ‪ N‬که ‪ 1 ≤ N ≤ 10‬به ترتیب در یک سطر قرار گرفته باشند و مقدار‬
‫اولیه خاک هر گلدان را به ترتیب ‪ Ai‬می نامیم‪ .‬هم چنین مقدار خاک جدید مورد نیاز هر گلدان را به ترتیب ‪Bi‬‬
‫مینامیم ‪ .‬فرض کنید خاک موجود در گلدان ها در طی این چند سال تغییری نکرده باشد و همه ‪ Ai‬و ‪ Bi‬ها در بازه ‪0‬‬
‫تا ‪ 10‬باشند ‪.‬‬
‫میدانیم به هر یک از سه طریق زیر میتوان مقدار خاک یک گلدان را تغییر داد ‪.‬‬
‫‪‬‬
‫میتواند ‪ 1‬واحد خاک بخرد و آن را در هر یک از گلدان ها که بخواهد بریزد ‪ .‬هزینه این عمل به طور ثابت‬
‫برابر ‪ X‬است ‪.‬‬
‫‪‬‬
‫میتواند ‪ 1‬واحد از خاک یک گلدان دلخواه را با هزینه ثابت ‪ Y‬از گلدان مورد نظر برداشته و دور بریزد ‪.‬‬
‫‪‬‬
‫میتواند یک واحد خاک را از گلدان ‪ i‬به گلدان ‪ j‬منتقل کند ‪ .‬هزینه این عمل برابر | ‪ Z × | i-j‬خواهد‬
‫بود ‪.‬‬
‫می خواهیم خاک هر گلدان مقدار مورد نیاز جدید شود ‪ .‬برنامه ای بنویسید که حداقل هزینه مورد نیاز برای انجام این‬
‫کار با توجه به مقادیر ورودی چقدر است ؟‬
‫‪7‬‬
‫تمرین سری دوم درس مبانی برنامه نویسی پایتون‬
‫دانشگاه شریف‬
‫پاییز ‪۴۹‬‬
‫ورودی‬
‫‪‬‬
‫در خط اول ورودی ‪ 2‬عدد ‪ N, X, Y, Z‬می آیند که با یک ‪ Space‬از هم جدا شده اند ‪.‬‬
‫‪‬‬
‫‪1 ≤ X , Y , Z ≤ 1000‬‬
‫در خط های ‪ 2‬تا ‪ ، N + 1‬در هر خط دو عدد می آید به طوری که در خط ‪ i+1‬ام ‪ ،‬به ترتیب دو عدد ‪ Ai‬و‬
‫‪ Bi‬میآیند که با یک ‪ Space‬از هم جدا شدهاند ‪.‬‬
‫خروجی‬
‫‪‬‬
‫فقط مقدار حداقل هزینه ای که با آن میتوان به حالت مورد نظر رسید را چاپ کنید ‪.‬‬
‫ورودی و خروجی نمونه‬
‫‪Sample Input‬‬
‫‪100 200 1‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪0‬‬
‫‪Sample Output‬‬
‫‪210‬‬
‫‪8‬‬
‫‪4‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬