Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सम पर सकारात्मक तत्व और विषम स्थितियों पर ऋणात्मक (सापेक्ष क्रम बनाए नहीं रखा गया) 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++ में विषम और सम संख्या वाले सभी स्तरों को प्रिंट करें

    इस समस्या में हमें एक पेड़ दिया जाता है। और हमें सभी स्तरों को सम संख्या में नोड्स और विषम संख्या में नोड्स के साथ प्रिंट करना होगा। आइए अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं आउटपुट - Levels with odd number of nodes: 1, 3, 4 Levels with even number of nodes: 2 स्पष्टीकरण - पह

  1. सी ++ में एक ऐरे में सम और विषम अनुक्रमित तत्वों का पूर्ण अंतर?

    एक सरणी एक ही डेटा प्रकार के कई तत्वों का एक कंटेनर है। तत्वों का सूचकांक 0 से शुरू होता है यानी पहले तत्व का सूचकांक 0 होता है। इस समस्या में, हमें दो सम अनुक्रमित संख्याओं और दो विषम अनुक्रमित संख्याओं के बीच पूर्ण अंतर खोजने की आवश्यकता है। सम अनुक्रमित संख्या =0,2,4,6,8…. विषम अनुक्रमित संख्य

  1. एक ऐरे (सी++) में सम और विषम अनुक्रमित तत्वों का पूर्ण अंतर?

    यहां हम देखेंगे कि हम एक सरणी में विषम और यहां तक ​​कि अनुक्रमित तत्वों के पूर्ण अंतर कैसे प्राप्त कर सकते हैं। निरपेक्ष अंतर इंगित करता है कि यदि एक जोड़ी का अंतर ऋणात्मक है, तो निरपेक्ष मान लिया जाएगा। उदाहरण के लिए, मान लीजिए कि संख्याएँ {1, 2, 3, 4, 5, 6, 7, 8, 9} हैं। तो सम स्थिति तत्व 1, 3, 5,