কম্পিউটার

C++ এ জোড় এবং বিজোড় অবস্থানে ঋণাত্মক উপাদান (আপেক্ষিক ক্রম বজায় নেই)


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

ইতিবাচক এবং নেতিবাচক মানগুলির একটি অসম সংখ্যা থাকতে পারে, এই ক্ষেত্রে, আমরা অতিরিক্ত মানগুলি সরাব না৷

সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,

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

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

এই সমস্যাটি সমাধান করার জন্য, আমাদের অ্যারেতে এমন উপাদান খুঁজে বের করতে হবে যা অর্ডারের বাইরে। এটি খুঁজে বের করার আরও একটি উপায় থাকতে পারে, এখানে আমরা তাদের দুটি নিয়ে আলোচনা করব৷

পদ্ধতি 1

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

উদাহরণ

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,

#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

পদ্ধতি 2

এই পদ্ধতিতে, আমরা একটি প্রক্রিয়া ব্যবহার করব যা দেখতে একটি দ্রুত সাজানোর কৌশলের মতো হবে। এখানে, আমরা দুটি পয়েন্টার নেব, একটি ধনাত্মক এবং অন্যটি নেতিবাচক সংখ্যার জন্য। আমরা সূচক 0 (এমনকি সূচক) এ ইতিবাচক পয়েন্টার এবং সূচক 1 (বিজোড় সূচক) এ নেতিবাচক পয়েন্টার সেট করব। এবং পয়েন্টার 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++) এ জোড় এবং বিজোড় সূচীকৃত উপাদানের পরম পার্থক্য?