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

C++-এ স্ট্রিংয়ে ৬ দিয়ে বিভাজ্য সাবস্ট্রিং গণনা

একটি পূর্ণসংখ্যা স্ট্রিং দেওয়া আছে। ৬ দিয়ে বিভাজ্য সাবস্ট্রিংয়ের সংখ্যা বের করতে হবে।

ইনপুট/আউটপুট উদাহরণ

ইনপুট: "648" → আউটপুট: 3 (সাবস্ট্রিং: "6", "48", "648")
ইনপুট: "38342" → আউটপুট: 4 (সাবস্ট্রিং: "3834", "342", "834", "42")

ব্রুট-ফোর্স পদ্ধতি

সব সম্ভাব্য সাবস্ট্রিং চেক করুন। O(n²) সময় লাগে।

উদাহরণ ১ (ব্রুট-ফোর্স)

#include <bits/stdc++.h> 
using namespace std; 

int str_to_int(string str, int i, int j) { 
    int temp = 0; 
    for (; i <= j; i++) temp = temp * 10 + (str[i] - '0'); 
    return temp; 
} 

int main() { 
    char str[] = "24661"; 
    int n = strlen(str), count = 0; 
    for (int i = 0; i < n; i++) 
        for (int j = i; j < n; j++) 
            if (str_to_int(str, i, j) % 6 == 0) count++; 
    cout << count << endl; 
    return 0; 
}

আউটপুট

6

দক্ষ পদ্ধতি (ডাইনামিক প্রোগ্রামিং)

৬ দিয়ে বিভাজ্যতার জন্য: শেষ অঙ্ক জোড় হতে হবে এবং অঙ্কগুলোর যোগফল ৩ দিয়ে বিভাজ্য হতে হবে। DP[i][s] = i-তম ইনডেক্স থেকে শুরু করে যোগফল মডুলো ৩ = s এমন সাবস্ট্রিংয়ের সংখ্যা। রিকারেন্স: f(i,s) = f(i+1, (s+a)%3) + (a%2==0 && (a+s)%3==0)।

উদাহরণ ২ (DP)

#include <bits/stdc++.h> 
using namespace std; 

int find(int i, int s, char str[], int dp[][3]) { 
    if (i == strlen(str)) return 0; 
    if (dp[i][s] != -1) return dp[i][s]; 
    int a = str[i] - '0'; 
    int ans = ((a + s) % 3 == 0 && a % 2 == 0) + find(i + 1, (s + a) % 3, str, dp); 
    return dp[i][s] = ans; 
} 

int main() { 
    char str[] = "24661"; 
    int n = strlen(str); 
    int dp[n+1][3]; 
    memset(dp, -1, sizeof dp); 
    int count = 0; 
    for (int i = 0; i < n; i++) { 
        if (str[i] == '0') count++; 
        else count += find(i, 0, str, dp); 
    } 
    cout << "Number of substrings divisible by 6: " << count << endl; 
    return 0; 
}

আউটপুট

Number of substrings divisible by 6: 6

উপসংহার

ডাইনামিক প্রোগ্রামিং ব্যবহার করে O(N) সময়ে ৬ দিয়ে বিভাজ্য সাবস্ট্রিং গণনা করা হয়েছে।

  1. সি++ কোড: সংখ্যাসূচক স্ট্রিংয়ের জোড় সাবস্ট্রিং গণনা করুন

  2. C++-এ স্ট্রিংয়ে ৮ দিয়ে বিভাজ্য কিন্তু ৩ দিয়ে না এমন সাবস্ট্রিং গণনা

  3. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  4. C++-এ CHAR_BIT