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

C++-এ জোড় ইনডেক্সে ধনাত্মক এবং বিজোড় ইনডেক্সে ঋণাত্মক এলিমেন্ট (রিলেটিভ অর্ডার মেইনটেইন না করে)


এই সমস্যাতে, একটি অ্যারে দেওয়া আছে এবং আমাদের কাজ হলো অ্যারেটিকে এমনভাবে রূপান্তর করা যাতে সব ধনাত্মক সংখ্যা জোড় ইনডেক্সে এবং সব ঋণাত্মক সংখ্যা বিজোড় ইনডেক্সে থাকে।

ধনাত্মক এবং ঋণাত্মক মানের সংখ্যা অসম হতে পারে, এই কেসে অতিরিক্ত মানগুলো সরাব না।

উদাহরণ:

ইনপুট - {3, 5, -1, 19, -7, -2}

আউটপুট - {3, -1, 5, -7, 19, -2}

সমাধানের জন্য, আমাদের অ্যারেতে আউট-অফ-অর্ডার এলিমেন্ট খুঁজে বের করতে হবে। এটি করার একাধিক পদ্ধতি আছে, এখানে দুটি পদ্ধতি আলোচনা করা হলো।

পদ্ধতি ১

এই পদ্ধতিতে, আমরা সিম্পলি অ্যারে ট্রাভার্স করব এবং প্রথম সেটি এলিমেন্ট খুঁজে বের করব যা সঠিক জায়গায় নেই (অর্থাৎ ধনাত্মক জোড় ইনডেক্সে নেই এবং ঋণাত্মক বিজোড় ইনডেক্সে নেই) এবং সেগুলো 스왪 করব। আমরা এই প্রক্রিয়া পুরো অ্যারে ট্রাভার্স না হওয়া পর্যন্ত চালিয়ে যাব।

উদাহরণ

সমাধানের প্রোগ্রাম:

#include<iostream> 
using namespace std; 

void swapElements(int* a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    return;
}

void printArray(int* a, int n) {
    for(int i = 0; i < n; i++)
        cout << a[i] << "\t";
    cout << endl;
    return;
}

void generateOrderedArray(int arr[], int n) {
    for(int i = 0; i < n; i++) {
        if(arr[i] >= 0 && i % 2 == 1) {
            for(int j = i + 1; j < n; j++) {
                if(arr[j] < 0 && j % 2 == 0) {
                    swapElements(arr, i, j);
                    break;
                }
            }
        } else if(arr[i] < 0 && i % 2 == 0) {
            for(int j = i + 1; j < n; j++) {
                if(arr[j] >= 0 && j % 2 == 1) {
                    swapElements(arr, i, j);
                    break;
                }
            }
        }
    }
    printArray(arr, n);
}

int main() {
    int arr[] = { 1, -3, 5, 6, -3, 6, 7, -4, 9, 10 };
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "Inital Array is : ";
    printArray(arr, n);
    cout << "Array with positive numbers at even index and negative numbers at odd index :";
    generateOrderedArray(arr,n);
    return 0;
}

আউটপুট

Inital Array is : 3 5 -1 19 -7 -2
Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2

পদ্ধতি ২

এই পদ্ধতিতে, আমরা একটি প্রক্রিয়া ব্যবহার করব যা কুইক সর্টেরเทคนিকের মতো। এখানে, আমরা দুটি পয়েন্টার নেব, একটি ধনাত্মক এবং অন্যটি ঋণাত্মক সংখ্যার জন্য। ধনাত্মক পয়েন্টার ইনডেক্স ০-তে (জোড় ইনডেক্স) এবং ঋণাত্মক পয়েন্টার ইনডেক্স ১-তে (বিজোড় ইনডেক্স) সেট করব। এবং পয়েন্টারগুলো ২ করে ফরওয়ার্ড করব। এবং থামব যখন ধনাত্মক পয়েন্টার ঋণাত্মক সংখ্যা পাবে এবং ঋণাত্মক পয়েন্টার ধনাত্মক সংখ্যা পাবে। এবং উভয় থামলে সওয়্যাপ করব। যদি কোনো পয়েন্টার অ্যারে ইনডেক্স বাইরে চলে যায়, তবে এক্সিকিউশন বন্ধ করব।

উদাহরণ

সমাধানের প্রোগ্রাম:

#include <iostream> 
using namespace std; 

void swapElements(int* a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    return;
}

void printArray(int *a, int n) {
    for (int i = 0; i < n; i++)
        cout << a[i] << "\t";
    cout << endl;
}

void generateOrderedArray(int a[], int size) {
    int positive = 0, negative = 1;
    while (1) {
        while (positive < size && a[positive] >= 0)
            positive += 2;
        while (negative < size && a[negative] <= 0)
            negative += 2;
        if (positive < size && negative < size)
            swapElements(a, positive, negative);
        else
            break;
    }
}

int main() {
    int arr[] = { 3, 5, -1, 19, -7, -2 };
    int n = (sizeof(arr) / sizeof(arr[0]));
    cout << "Inital Array is : ";
    printArray(arr, n);
    cout << "Array with positive numbers at even index and negative numbers at odd index : ";
    generateOrderedArray(arr, n);
    printArray(arr, n);
    return 0;
}

আউটপুট

Inital Array is : 3 5 -1 19 -7 -2
Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2

  1. বিজোড় এবং জোড় সংখ্যক নোড वाले ট্রি লেভেল প্রিন্ট করা C++-তে

  2. C++-এ C দ্বারা বিভাজ্য এবং [A, B] রেঞ্জের বাহিরে ন্যূনতম ধনাত্মক পূর্ণসংখ্যা

  3. C++ তে অ্যারেতে জোড় ও বিজোড় ইনডেক্সের এবসোলিউট ডিফারেন্স

  4. C++-এ অ্যারেতে জোড় ও বিজোড় ইনডেক্সের উপাদানগুলোর tuyệt đối পার্থক্য