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

C++-এ বড় সংখ্যা সমান যোগফলের দুই বা অধিক সেগমেন্টে ভাগ করা যায় কিনা চেক করা

এখানে আমরা একটি প্রোগ্রাম দেখব যা চেক করবে একটি সংখ্যা একের অধিক সেগমেন্টে সমান যোগফলে ভাগ করা যায় কিনা। ধরুন একটি সংখ্যা ৭৪৩২৫, এটি তিনটি অংশে সেগমেন্ট করা যায়: (৭), (৪, ৩), (২, ৫) - সবার যোগফল সমান।

সমাধানের ধাপগুলো:

  • সংখ্যাকে স্ট্রিং হিসেবে নিন
  • প্রিফিক্স সাম অ্যারে ব্যবহার করুন
  • দ্বিতীয় এলিমেন্ট থেকে শেষ পর্যন্ত ট্রাভার্স করুন, প্রথম সেগমেন্ট 0 থেকে i-1, যার যোগফল prefix_sum[i-1]-এ থাকবে
  • একটি ভেরিয়েবল ব্যবহার করুন 1 থেকে n পর্যন্ত ট্রাভার্স করতে, যোগফল যোগ করুন
  • যদি যোগফল prefix_sum[i-1] এর সমান হয়, তবে সেগমেন্টের যোগফল প্রথমটির সমান
  • সেগমেন্ট সাম ০ করে দিন এবং পয়েন্টার বাড়ান
  • যদি সেগমেন্ট সাম prefix_sum[i-1] থেকে বড় হয়, লুপ ব্রেক করুন
  • শেষে পৌঁছালে যদি লাস্ট সেগমেন্ট সাম প্রথমটির সমান হয়, তবে সমান যোগফলে সেগমেন্ট করা সম্ভব

উদাহরণ কোড

#include <iostream>
using namespace std;

bool canBeSegmented(string str) {
    int n = str.length();
    int prefix_sum[n];
    prefix_sum[0] = str[0] - '0';
    for (int i = 1; i < n; i++) {
        prefix_sum[i] = prefix_sum[i - 1] + (str[i] - '0');
    }
    for (int i = 1; i <= n - 1; i++) {
        int sum = prefix_sum[i - 1];
        int prev_sum = 0;
        int it = i;
        bool flag = false;
        while (it < n) {
            prev_sum += str[it] - '0';
            if (prev_sum == sum) {
                prev_sum = 0;
                flag = true;
            } else if (prev_sum > sum) {
                break;
            }
            it++;
        }
        if (prev_sum == 0 && it == n && flag) {
            return true;
        }
    }
    return false;
}

int main() {
    string s = "74325";
    if (canBeSegmented(s))
        cout << "Yes, This can be segmented into more than two segments";
    else
        cout << "No, This can not be segmented into more than two segments";
    return 0;
}

আউটপুট

Yes, This can be segmented into more than two segments
  1. C++ প্রোগ্রাম: সংখ্যা ২টি ট্রায়্যাঙ্গুলার নাম্বারের যোগফল কিনা চেক

  2. C++ প্রোগ্রাম: বড় সংখ্যা ১৫ দিয়ে বিভাজ্য কিনা চেক (স্ট্রিং ইনপুট)

  3. C++-এ একটি সংখ্যা দুটি প্রাইমের যোগফল হিসেবে এক্সপ্রেস করা যায় কিনা চেক করা

  4. পাইথনে যাচাই করুন ১ ও ২ সম্বলিত অ্যারে সমান যোগফলের দুই অংশে ভাগ করা যায় কিনা