پیاده سازی¶
توضیحات¶
به طور کلی، روند حل سوال عملی، شامل ۲ بخش ارائه الگوریتم برای سوال و نوشتن کد الگوریتم ارائه داده شده میباشد. برای تقویت مهارت پیاده سازی، فقط تمرین بیشتر و نوشتن کد سوالات ساده نیاز است.
زبان برنامه نویسی¶
در المپیاد کامپیوتر ایران، تنها استفاده از زبان برنامه نویسی سی پلاس پلاس مجاز است.
دقت کنید که در دوره های اخیر المپیاد کامپیوتر، تنها استفاده از C++ 11 مجاز بوده است.
توصیه میشود قبل از شروع یادگیری الگوریتمها، به مفاهیم زیر در زبان سی پلاس پلاس تسلط کافی داشته باشید:
- خواندن ورودی و خروجی
- متغیر ها
- عملگر های ریاضی
- شرط ها و حلقه ها
- آرایه
- توابع
همچنین پس از یادگیری مفاهیم فوق، یادگیری استفاده از داده ساختار های زیر توصیه میشود:
در پایان، مطالعه در مورد بعضی از کتابخانه های سی پلاس پلاس مانند algorithm و cmath میتواند مفید واقع شود.
چند منبع مفید برای یادگیری سی پلاس پلاس¶
چند بلاگ برای یادگیری توابع و نکات کاربردی سی پلاس پلاس در المپیاد¶
محیط کدنویسی¶
برای شروع، استفاده از ادیتور ها و ide هایی همچون Code::Blocks و ++DevC توصیه میشود، همچنین تکست ادیتور هایی مانند Visual Studio Code، Sublime Text و vim نیز میتوانند کمک کننده باشند.
در برخی دوره های المپیاد کامپیوتر ایران، استفاده از تکست ادیتور vim اجباری بوده! همچنین در تمامی آزمون های نهایی تابستان، از سیستم عامل Ubuntu استفاده میشود.
تمرین بیشتر برای پیاده سازی¶
یکی از تمرین های مفید برای بهبود مهارت پیاده سازی، حل سوالات ساده سایت Codeforces و کوئرا است، با ورود به این سایت ها و مرتب کردن سوالات بر حسب تعداد حل آنها، میتوانید ساده ترین سوالات این ۲ سایت را حل کنید.
ورودی و خروجی سریع تر¶
خواندن ورودی و نوشتن خروجی، در حالت عادی زمان زیادی را به خود میگیرد و اگر ورودی یا خروجی سوالات بزرگ باشند، میتواند دردسر ساز باشد. با استفاده از کد زیر، میتوانید ورودی و خروجی گرفتن را در برنامه خود سریع تر کنید(مطالعه بیشتر)
ذخیره اعداد بزرگ(BigNum)¶
هیچ متغیری در سی پلاس پلاس، توانایی ذخیره اعداد بزرگتر از \(2^{64}\) را ندارد. همچنین برخلاف زبان های برنامه نویسی همچون Java، هیچ کتابخانه ای در سی پلاس پلاس به این موضوع اختصاص داده نشده، اما در برخی از سوالات، به ذخیره و کار با چنین اعدادی نیاز میشود. توصیه میشود به عنوان تمرین پیاده سازی، داده ساختاری بسازید که بتواند اعداد به هر سایزی را در خود نگه دارد، بتواند روی آنها عملیات های ساده ریاضی انجام دهد و همچنین بتواند ۲ عدد را مقایسه کند(میتوانید کد خود را روی این سوال امتحان کنید) همچنین در سایر سوالات(بجز سوالات این بخش) در صورت نیاز، میتوانید از این کد استفاده کنید.
پیشنهاد میشود از کد آماده داده شده در سوالات این بخش استفاده نکنید و سعی کنید خودتان داده ساختار مورد نیاز را پیاده کنید!
سوال ها¶
سوال | سختی | تگ ها | جاج |
---|---|---|---|
a + b | 800 | Spoiler |
SGU |
فاکتوریل | 800 | Spoiler |
Quera |
اعداد فیثاغورثی | 800 | Spoiler |
Quera |
Distinc Digits | 800 | Spoiler |
Codeforces |
مثلث خیام پاسکال | 800 | Spoiler |
Quera |
توان ۲ | 800 | Spoiler |
Quera |
چاپ لوزی | 800 | Spoiler |
Quera |
عدد خود مغلوب | 800 | Spoiler |
Quera |
لوزی های ستاره ای | 800 | Spoiler |
Quera |
تک رقمی | 800 | Spoiler |
Quera |
مبنا | 800 | Spoiler |
Quera |
مسابقه پیاده سازی کوئرا(همه سوالات) | 800 | Spoiler |
Quera |
مسابقه پیاده سازی کوئرا(همه سوالات) | 800 | Spoiler |
Quera |
a^b - b^a | 1000 | Spoiler |
SGU |
Spam Filter | 1000 | Spoiler |
SGU |
Lexicographic permutations | 1000 | Spoiler |
Project Euler |
1000-digit Fibonacci number | 1000 | Spoiler |
Project Euler |
Factorial digit sum | 1300 | Spoiler |
Project Euler |