پرش به محتویات

پیاده سازی

توضیحات

به طور کلی، روند حل سوال عملی، شامل ۲ بخش ارائه الگوریتم برای سوال و نوشتن کد الگوریتم ارائه داده شده می‌باشد. برای تقویت مهارت پیاده سازی، فقط تمرین بیشتر و نوشتن کد سوالات ساده نیاز است.

زبان برنامه نویسی

در المپیاد کامپیوتر ایران، تنها استفاده از زبان برنامه نویسی سی پلاس پلاس مجاز است.

دقت کنید که در دوره های اخیر المپیاد کامپیوتر، تنها استفاده از C++ 11 مجاز بوده است.

توصیه می‌شود قبل از شروع یادگیری الگوریتم‌ها، به مفاهیم زیر در زبان سی پلاس پلاس تسلط کافی داشته باشید:

  • خواندن ورودی و خروجی
  • متغیر ها
  • عملگر های ریاضی
  • شرط ها و حلقه ها
  • آرایه
  • توابع

همچنین پس از یادگیری مفاهیم فوق، یادگیری استفاده از داده ساختار های زیر توصیه می‌شود:

در پایان، مطالعه در مورد بعضی از کتابخانه های سی پلاس پلاس مانند algorithm و cmath می‌تواند مفید واقع شود.

چند منبع مفید برای یادگیری سی پلاس پلاس

چند بلاگ برای یادگیری توابع و نکات کاربردی سی پلاس پلاس در المپیاد

محیط کدنویسی

برای شروع، استفاده از ادیتور ها و ide هایی همچون Code::Blocks و ++DevC توصیه می‌شود، همچنین تکست ادیتور هایی مانند Visual Studio Code، Sublime Text و vim نیز می‌توانند کمک کننده باشند.

در برخی دوره های المپیاد کامپیوتر ایران، استفاده از تکست ادیتور vim اجباری بوده! همچنین در تمامی آزمون های نهایی تابستان، از سیستم عامل Ubuntu استفاده می‌شود.

تمرین بیشتر برای پیاده سازی

یکی از تمرین های مفید برای بهبود مهارت پیاده سازی، حل سوالات ساده سایت Codeforces و کوئرا است، با ورود به این سایت ها و مرتب کردن سوالات بر حسب تعداد حل آنها، می‌توانید ساده ترین سوالات این ۲ سایت را حل کنید.

ورودی و خروجی سریع تر

خواندن ورودی و نوشتن خروجی، در حالت عادی زمان زیادی را به خود می‌گیرد و اگر ورودی یا خروجی سوالات بزرگ باشند، می‌تواند دردسر ساز باشد. با استفاده از کد زیر، می‌توانید ورودی و خروجی گرفتن را در برنامه خود سریع تر کنید(مطالعه بیشتر)

1
2
3
4
5
6
7
8
// ...

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    // ...
}

ذخیره اعداد بزرگ(‌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

نظرات