fbpx

Энэ удаагийн нийтлэлээр бид SPOJ (Sphere Online Judge) сайтаас сонгож авсан нэгэн бодлогыг ашиглан, үр дүнтэй алгоритм зохиох ур чадварыг хэрхэн хөгжүүлэх талаар судалж, задлан шинжлэх болно. Өрсөлдөөнт програмчлалын бодлого бодох нь зөвхөн зөв хариу олохоос гадна өгөгдсөн хугацаа, санах ой зэрэг хязгаарлалт дотор хэрхэн оновчтой шийдэл олох талаар сэтгэх, өөр өөр хувилбарыг турших, бодит нөхцөлд програм хангамжийн гүйцэтгэлийг сайжруулах чухал дадлыг олгодог. Иймээс бид сонгосон бодлогыг хэрхэн олон өнцгөөс хандаж болох, алгоритмын гүйцэтгэлийг сайжруулах ямар арга техникүүд ашиглаж болох талаар нарийвчлан авч үзэх болно.

https://www.spoj.com/RGB7/problems/RGB7212/

Энэ бол энгийн давталт ашиглан натурал тоонуудын факториал буюу n!-ыг тооцоолж хэвлэдэг бодлого юм. Бодлогын зорилго нь:

Жишээтэй ижил форматтайгаар (k!=fact) нэг бүрчлэн хэвлэх.

Факториал гэж юу вэ?

Нэг натурал тооны факториал гэдэг нь тэр тооноос эхлээд 1 хүртэлх бүх тоог үржсэн үр дүн юм.

  • 1! = 1
  • 2! = 2 × 1 = 2
  • 3! = 3 × 2 × 1 = 6
  • 4! = 4 × 3 × 2 × 1 = 24

n! = n × (n-1) × … × 2 × 1

✨ Жишээлбэл:

Оролт : 3

Гаралт :

1 ! = 1

2 ! = 2

3 ! = 3


Хугацаа болон санах ойн хязгаарлалт харгалзан өгөгдсөн ба бүхэл тоон хязгаар өгөгдөөгүй тул бид алгоритмын ажиллах хугацааг урьдчилан тооцоолох боломжгүй байна.


Ингэснээр бид бодлогын өгүүлбэр болон хязгаарлалттай танилцаж, үндсэн нөхцөлийг ойлгож авлаа. Одоо бол алгоритмаа гаргаж, хэрэгжүүлэх цаг ирлээ. Алгоритм боловсруулахдаа нэг л шийдэлд хязгаарлагдалгүй, өөр өөр өнцгөөс хэд хэдэн хувилбараар сэтгэн бодох боломжтой.

💡 Бодлогын шийдэл:

Тухайн i болон түүний факториалыг i!=fact гэсэн форматтай хэвлэнэ

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

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n; 

    int fact = 1;
    for (int i = 1; i <= n; i++) {
        fact *= i;
        cout << i << "!=" << fact << endl;
    }

    return 0;
}

⚡ Python програмчлалын хэл дээр

n = int(input()) 

fact = 1
for i in range(1, n + 1):
    fact *= i
    print(f"{i}!={fact}")
Өрсөлдөөнт программчлал бидэнд зөвхөн техник мэдлэг бус, асуудалд хэрхэн бүтээлчээр хандахыг сургадгаараа үнэ цэнтэй. Хэн хамгийн хурдан, цэвэрхэн, оновчтой алгоритмаар асуудлыг шийднэ — тэр л хамгийн мундаг нь!

Leave a Reply