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

C++-এ দেওয়া শব্দের (i-1)তম, iতম বা (i+1)তম অক্ষর থেকে তৈরি শব্দগুলোর গণনা


আমাদের ইনপুট হিসেবে একটি স্ট্রিং str[] দেওয়া হয়েছে। লক্ষ্য হল str[]- থেকে এমন শব্দগুলোর সংখ্যা গণনা করা যাদের দৈর্ঘ্য str[] এর সমান এবং যাদের প্রতিটি অবস্থানের অক্ষর 본래 শব্দের (i-1)তম, iতম বা (i+1)তম অক্ষর হতে পারে।

প্রথম অক্ষরের জন্য প্রতিস্থাপন হবে iতম বা (i+1)তম অবস্থান থেকে।
শেষ অক্ষরের জন্য প্রতিস্থাপন হবে (i-1)তম বা iতম অবস্থান থেকে।

উদাহরণ

ইনপুট: str[] = "TPP"

আউটপুট: ৪

ব্যাখ্যা:

T কে T (iতম) বা প্রথম P (i+1তম) দিয়ে প্রতিস্থাপন = TPP, PPP
প্রথম P কে T (i-1তম), P (iতম), বা দ্বিতীয় P (i+1তম) দিয়ে প্রতিস্থাপন = TTP, TPP, PTP
দ্বিতীয় P কে প্রথম P (i-1তম) বা P (iতম) দিয়ে প্রতিস্থাপন = TPP, PTP
অনন্য সংমিশ্রণ: TPP, PPP, TTP, PTP

ইনপুট: str = "aaa"

আউটপুট: ১

ব্যাখ্যা: সব অক্ষর একই হলে শুধু একটি অনন্য শব্দ তৈরি হয়।

অ্যালগরিদম

প্রতিটি অক্ষরের জন্য তিনটি সম্ভাবনা থাকে। যদি (i-1)তম, iতম, (i+1)তম তিনটি অক্ষর আলাদা হয় তবে ৩টি অপশন, দুটি একই হলে ২টি, তিনটিই একই হলে ১টি অপশন।

স্ট্রিং ট্রাভার্স করে প্রতিটি অবস্থানের জন্য অদ্বিতীয়তার পরীক্ষা করে ৩, ২ বা ১ দিয়ে গুণ করতে হবে। প্রথম এবং শেষ অক্ষরের জন্য ২ বা ১ দিয়ে গুণ করা হবে।

  1. স্ট্রিং কে ক্যারেক্টার অ্যারে হিসেবে নিন।
  2. total(char str[], int length) ফাংশনটি স্ট্রিং এবং দৈর্ঘ্য নিয়ে গণনা করবে।
  3. প্রাথমিক কাউন্ট ১ (স্ট্রিংটি নিজে)।
  4. যদি দৈর্ঘ্য ১ হয়, ১ ফেরত দিন।
  5. প্রথম অক্ষর (সূচক ০) পরীক্ষা করুন: যদি দ্বিতীয় অক্ষরের সমান হয় তবে কাউন্ট × ১, অন্যথায় × ২।
  6. দ্বিতীয় থেকে শেষের আগের অক্ষর পর্যন্ত (সূচক ১ থেকে length-2) লুপ চালান।
  7. প্রতিটি সূচক i-তে: যদি str[i] এর চাপাশের দুটোর সাথে মিলে যায় তবে × ১, দুটি মিলে যায় তবে × ২, অন্যথায় × ৩।
  8. শেষ অক্ষর: যদি পূর্বের অক্ষরের সাথে মিলে যায় তবে × ১, অন্যথায় × ২।
  9. ফলাফল ফেরত দিন।

C++ বাস্তবায়ন

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

int total(char str[], int length) {
    int count = 1;
    if (length == 1) return count;
    
    if (str[0] == str[1]) count *= 1;
    else count *= 2;
    
    for (int j = 1; j < length - 1; j++) {
        if (str[j] == str[j-1] && str[j] == str[j+1]) count *= 1;
        else if (str[j] == str[j-1]) count *= 2;
        else if (str[j] == str[j+1]) count *= 2;
        else if (str[j-1] == str[j+1]) count *= 2;
        else count *= 3;
    }
    
    if (str[length - 1] == str[length - 2]) count *= 1;
    else count *= 2;
    
    return count;
}

int main() {
    char str[] = "TPP";
    int length = strlen(str);
    cout << "Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: " 
         << total(str, length) << endl;
    return 0;
}

আউটপুট

Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4
  1. বাইনারি ট্রিতে ২-এর ঘাত বিশিষ্ট ওজন সম্পন্ন নোড গণনা C++-এ

  2. C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের যোগফল x সেটির সংখ্যা গণনা

  3. C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের গুণফল x সেটির সংখ্যা গণনা

  4. C++-এ দুটি BST-র নোড জোড়া যাদের যোগফল x গণনা