কম্পিউটার টিউটোরিয়াল

C++ প্রোগ্রাম: একটি ইন্টিজারকে সব সম্ভাব্য উপায়ে পার্টিশন করা


এখানে একটি C++ প্রোগ্রাম দেওয়া হলো একটি দিয়ে गये ইন্টিজারের সব ইউনিক পার্টিশন পেতে যেখানে পার্টিশনের যোগফল সেই ইন্টিজার হবে। এই প্রোগ্রামে, একটি পজিটিভ ইন্টিজার n দেওয়া আছে, এবং n কে পজিটিভ ইন্টিজারদের যোগফল হিসেবে রিপ্রেজেন্ট করার সব সম্ভাব্য ইউনিক উপায় জেনারেট করতে হবে।

অ্যালগরিদম

শুরু
  function displayAllUniqueParts(int m):
    একটি পার্টিশন স্টোর করার জন্য একটি অ্যারে ডিক্লেয়ার করুন p[m]।
    একটি পার্টিশনে লাস্ট এলিমেন্টের ইনডেক্স k কে ০ সেট করুন
    প্রথম পার্টিশন ইনিশিয়ালাইজ করুন নম্বরটি নিজেই হিসেবে, p[k]=m
    একটি হুইল লুপ তৈরি করুন যা প্রথম করেন্ট পার্টিশন প্রিন্ট করবে, তারপর পরবর্তী পার্টিশন জেনারেট করবে। লুপ থামবে যখন করেন্ট পার্টিশনে সব ১ থাকবে।
    করেন্ট পার্টিশন ডিসপ্লে করুন displayArray(p, k + 1) দিয়ে।
    পরবর্তী পার্টিশন জেনারেট করুন:
      val=0 ইনিশিয়ালাইজ করুন।
      p[]-এ রাইটমোস্ট নন-ওয়ান ভ্যালু খুঁজুন। এছাড়া val আপডেট করুন যাতে জানা যায় কতটুকু ভ্যালু একোমোডেট করা যাবে।
      If k < 0,
        সব ভ্যালু ১ তাই আর কোনো পার্টিশন নেই
      উপরে পাওয়া p[k] ডিক্রিজ করুন এবং val অ্যাডজাস্ট করুন।
      If val বেশি হয়,
        তবে সর্টেড অর্ডার ভাঙবে। val কে p[k] আকারের বিভিন্ন ভ্যালুতে ভাগ করুন এবং এই ভ্যালুগুলো p[k]-র পরে বিভিন্ন পজিশনে কপি করুন।
        val কে পরবর্তী পজিশনে কপি করুন এবং পজিশন ইনক্রিমেন্ট করুন।
শেষ

উদাহরণ কোড

#include<iostream>
using namespace std;

void printArr(int p[], int m) {
    for (int i = 0; i < m; i++)
        cout << p[i] << " ";
    cout << endl;
}

void printAllUniqueParts(int m) {
    int p[m];
    int k = 0;
    p[k] = m;
    while (true) {
        printArr(p, k + 1);
        int rem_val = 0;
        while (k >= 0 && p[k] == 1) {
            rem_val += p[k];
            k--;
        }
        if (k < 0)
            return;
        p[k]--;
        rem_val++;
        while (rem_val > p[k]) {
            p[k + 1] = p[k];
            rem_val = rem_val - p[k];
            k++;
        }
        p[k + 1] = rem_val;
        k++;
    }
}

int main() {
    cout << "All Unique Partitions of 3\n";
    printAllUniqueParts(3);
    cout << "\nAll Unique Partitions of 4\n";
    printAllUniqueParts(4);
    cout << "\nAll Unique Partitions of 5\n";
    printAllUniqueParts(5);
    return 0;
}

আউটপুট

All Unique Partitions of 3
3
2 1
1 1 1
All Unique Partitions of 4
4
3 1
2 2
2 1 1
1 1 1 1
All Unique Partitions of 5
5
4 1
3 2
3 1 1
2 2 1
2 1 1 1
1 1 1 1 1
  1. C++-এ N x 3 গ্রিড রঙ করার পদ্ধতির সংখ্যা

  2. C++-এ সব সম্ভব ফুল বাইনারি ট্রি

  3. সি++ প্রোগ্রাম: তিনটি দিয়ে থাকা কোয়ার্ডিনেট দিয়ে সমান্তরাল চতুর্ভুজ (Parallelogram)-এর সব সম্ভাব্য কোয়ার্ডিনেট খুঁজে বের করা

  4. C++ প্রোগ্রাম: ইন্টিজারের ডিজিট জুম করে প্রিন্ট করা