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

C প্রোগ্রামে প্যালিনড্রোম বানানোর জন্য ক্যারেক্টার পজিশন অ্যারেঞ্জ করা


ভূমিকা

একটি স্ট্রিং দেওয়া থাকলে, তার ক্যারেক্টারগুলোর পজিশন (ইন্ডেক্স) এমনভাবে বিন্যাস করতে হবে যাতে সেটি প্যালিনড্রোম হয়। যদি সম্ভব না হয়, তবে "No palindrome" প্রিন্ট করতে হবে।

প্যালিনড্রোম কী?

প্যালিনড্রোম হলো এমন শব্দ বা ক্যারেক্টার সিকোয়েন্স যা উল্টা পড়লেও একই থাকে, যেমন: MADAM, racecar।

উদাহরণ

ইনপুট: "baa" → আউটপুট: 2 1 3
ইনপুট: "tinni" → আউটপুট: 2 3 1 4 5

এলগরিদম

void printPalindromePos(string &str)
শুরু
  ধাপ ১: প্রতিটি ক্যারেক্টারের পজিশন সংরক্ষণ করার জন্য vector pos[MAX] ঘোষণা
  ধাপ ২: n = str.length()
  ধাপ ৩: i = 0 থেকে n-1 পর্যন্ত লুপ
    pos[str[i]].push_back(i+1) // 1-ভিত্তিক ইন্ডেক্স
  লুপ শেষ
  ধাপ ৪: oddCount = 0, oddChar ঘোষণা
  ধাপ ৫: i = 0 থেকে MAX-1 পর্যন্ত লুপ
    যদি pos[i].size() বিজোড় হয়:
      oddCount++, oddChar = i
  লুপ শেষ
  ধাপ ৬: যদি oddCount > 1 হয়: "NO PALINDROME" প্রিন্ট করুন
  ধাপ ৭: প্রথম অর্ধেকের পজিশন প্রিন্ট করুন
  ধাপ ৮: বিজোড় ক্যারেক্টারের মাঝপথের পজিশন প্রিন্ট করুন
  ধাপ ৯: দ্বিতীয় অর্ধেকের পজিশন উল্টা ক্রমে প্রিন্ট করুন
শেষ

C++ প্রোগ্রাম উদাহরণ

#include 
using namespace std;
const int MAX = 256;

void printPalindromePos(string &str) {
    vector pos[MAX];
    int n = str.length();
    for (int i = 0; i < n; i++)
        pos[str[i]].push_back(i + 1);

    int oddCount = 0;
    char oddChar;
    for (int i = 0; i < MAX; i++) {
        if (pos[i].size() % 2 != 0) {
            oddCount++;
            oddChar = i;
        }
    }

    if (oddCount > 1) {
        cout << "NO PALINDROME";
        return;
    }

    // প্রথম অর্ধেক
    for (int i = 0; i < MAX; i++) {
        int mid = pos[i].size() / 2;
        for (int j = 0; j < mid; j++)
            cout << pos[i][j] << " ";
    }

    // মাঝপথের বিজোড় ক্যারেক্টার
    if (oddCount > 0) {
        int last = pos[oddChar].size() - 1;
        cout << pos[oddChar][last] << " ";
        pos[oddChar].pop_back();
    }

    // দ্বিতীয় অর্ধেক (উল্টা ক্রমে)
    for (int i = MAX - 1; i >= 0; i--) {
        int count = pos[i].size();
        for (int j = count / 2; j < count; j++)
            cout << pos[i][j] << " ";
    }
}

int main() {
    string s = "tinni";
    printPalindromePos(s);
    return 0;
}

আউটপুট

2 3 1 4 5
  1. C প্রোগ্রাম: অ্যারে প্যালিনড্রোম কিনা চেক করা

  2. C প্রোগ্রামে ম্যাট্রিক্সকে ডায়াগোনালি নিচের দিকে প্রিন্ট করা

  3. C প্রোগ্রামে ম্যাট্রিক্সের কলামগুলোকে শূন্যের সংখ্যা অনুযায়ী সর্ট করা

  4. C প্রোগ্রামে অ্যারেতে উপাদানগুলোর শেষ অকরেন্স রিলেটিভ অর্ডারে প্রিন্ট করা