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 << "प्रारंभिक ऐरे है: ";
    printArray(arr, n);
    cout << "सकारात्मक संख्याएं सम इंडेक्स पर और नकारात्मक संख्याएं विषम इंडेक्स पर: ";
    generateOrderedArray(arr, n);
    return 0;
}

आउटपुट

प्रारंभिक ऐरे है: 3 5 -1 19 -7 -2
सकारात्मक संख्याएं सम इंडेक्स पर और नकारात्मक संख्याएं विषम इंडेक्स पर: 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 << "प्रारंभिक ऐरे है: ";
    printArray(arr, n);
    cout << "सकारात्मक संख्याएं सम इंडेक्स पर और नकारात्मक संख्याएं विषम इंडेक्स पर: ";
    generateOrderedArray(arr, n);
    printArray(arr, n);
    return 0;
}

आउटपुट

प्रारंभिक ऐरे है: 3 5 -1 19 -7 -2
सकारात्मक संख्याएं सम इंडेक्स पर और नकारात्मक संख्याएं विषम इंडेक्स पर: 3 -1 5 -7 19 -2
  1. C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें

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

  1. - C++ में एरे में सम और विषम इंडेक्स वाले तत्वों का निरपेक्ष अंतर

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

  1. - C++ में ऐरे के सम और विषम इंडेक्स वाले तत्वों का निरपेक्ष अंतर

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