Өнөө үеийн технологийн хувьсал, дижитал шилжилт нь мэдээллийн технологийн салбарын инженерүүдээс зөвхөн онолын мэдлэг төдийгүй, бодит асуудлыг шийдвэрлэх хурд, алгоритмын гүнзгий ойлголт, бүтээлч сэтгэлгээг шаарддаг болсон билээ. CodeX Олимпиад нь энэхүү шаардлагад нийцсэн ирээдүйн инженерүүдийг бэлтгэх, сорих зорилготой өрсөлдөөнт програмчлалын тэмцээн юм. Олимпиад нь алгоритм, өгөгдлийн бүтэц, математик логик зэрэг өрсөлдөөнт програмчлалын гол чадваруудыг шалгах ба оролцогчид хязгаарлагдмал хугацаанд төвөгтэй бодлогуудыг бодож, хамгийн оновчтой, хурдан шийдлийг олохыг эрмэлзэнэ.Энэхүү тэмцээн нь TEEE (The Essential Engineering Education) сургуулиас зохиож буй цуврал олимпиад бөгөөд сурагчдын оюуны чадамжийг хөгжүүлэхээс гадна олон улсын түвшинд өрсөлдөх чадвартай болох боломжийг бүрдүүлнэ.
CodeX[3] Олимпиадын бүртгэл эхэллээ 😊
Энэхүү нийтлэл нь олимпиадын үеэр өгөгдсөн бодлогуудын нарийвчилсан тайлбар, тэдгээрийг шийдвэрлэх боломжит арга замуудын талаар өгүүлэх болно. Бид бодлогын нөхцөлийг задлан шинжилж, бодох арга барил, оновчтой алгоритмууд болон шийдлийг тайлбарлахын зэрэгцээ, түгээмэл гардаг алдаа болон тэдгээрээс хэрхэн зайлсхийх талаар мөн онцлон хэлэлцэх болно.
1. Warm up

Энэхүү бодлого нь бие халаалтын буюу энгийн логиктой бодлого бөгөөд үндсэндээ өгөгдсөн нөхцөлийг шууд хэрэгжүүлэхэд л хангалттай. Тодруулбал, хэрэглэгчээс нэг тоо авах бөгөөд уг тоо 15-аас их байгаа эсэхийг шалгаж, үр дүнг харгалзан тохирох мэдээллийг хэвлэх шаардлагатай.
Хэрэгжүүлэлтийн хувьд дараах байдлаар бодож болно:
- Оролт авах – Гараас нэг тоо унших.
- Нөхцөл шалгах – Оролтод өгөгдсөн тоо 15-аас их эсэхийг шалгах.
- Гаралт хэвлэх – Хэрэв 15-аас их бол YES, бага бол NO гэсэн утга хэвлэх.
Энэ нь үндсэндээ if-else нөхцөл ашиглан хялбархан шийдэж болох бодлого юм.
Python програмчлалын хэл дээр :

C++ програмчлалын хэл дээр :

2. Нууцлаг ертөнц

Бодлого бодох явцын хамгийн чухал хэсэг нь өгүүлбэрийг зөв ойлгож унших явдал гэдгийг бид өмнөх нийтлэлүүддээ онцолсон бөгөөд энэхүү бодлогын үндсэн зорилго нь өгөгдсөн тоо хүртэлх бүх анхны тооны нийлбэрийг олох юм. Анхны тоо гэдэг нь зөвхөн 1 болон өөртөө хуваагддаг тоо бөгөөд өгөгдөх тооны хязгаар 1,000,000 хүртэл, хугацааны хязгаар 1 секунд байна. Давхар давталт (O(n²)) ашиглавал өндөр утгатай тоон дээр хэт их хугацаа шаардагдах тул өгөгдсөн хугацаанд бүх тестийг давахад хүндрэлтэй байж магадгүй. Тиймээс хугацааг багасгахын тулд бид тухайн тооны язгуур хүртэл л шалгах бөгөөд энэ нь ямар ч тооны хуваагч нь түүний язгуурын утгаас бага байдаг гэсэн математикийн үндсэн зарчимд тулгуурласан учир илүү оновчтой шийдэл болно.
Python програмчлалын хэл дээр :

C++ програмчлалын хэл дээр :

3. Гаригийн тулалдаан : Хоёрдугаар эзэн

Энэхүү бодлогын хувьд толгой эргүүлсэн төвөгтэй өгүүлбэртэй ба энэ нь competitive programming -ийн нэг хэсэг билээ. Учир нь бид тухайн асуудлаас хамгийн гол хэсгийг ялгаж харах чадвартай байх хэрэгтэй. Бодлогын гол агуулга нь баатруудын хүч өгөгдөхөд 2 дохь хүчтэнийг олох юм. Энгийнээр бидэнд n тоо өгөгдөх ба дараа нь n ширхэг хүч өгөгдөнө. Ингээд бид энэхүү дарааллаас 2 дохь хамгийн их тоог олон түүний утгыг хэвлэхэд хангалттай.
Python програмчлалын хэл дээр :

C++ програмчлалын хэл дээр :

Энэхүү энгийн хэрэгжүүлэлтээс гадна бид баатруудын хүчийг гараас авч, жагсаалтад хадгалан, түүнийг эрэмбэлээд хамгийн их хоёр дахь элементийг хэвлэх аргаар ч ижил үр дүнд хүрэх билээ.
Хамгийн богино бодолт :

Бидний цуврал олимпиадын эхний шат болох Сорилго тэмцээний бодлогуудыг танилцууллаа. Тууштай хичээж, шантралгүй тэмцэж явбал гарцаагүй амжилтад хүрэх билээ. Энэ нь зөвхөн эхлэл бөгөөд ирээдүйн тэмцээнүүдэд илүү их мэдлэг, ур чадвараа сорих боломжтой. Дараа дараагийн тэмцээнүүдэд илүү амжилттай оролцохыг хүсье !