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

C++ में निश्चित क्रम में संख्याओं को व्यवस्थित करके सबसे बड़ी संख्या


इस समस्या में, हमें संख्याओं का एक ऐरे दिया जाता है और हमें एक निश्चित तरीके से उन्हें बदलकर बनाई जा सकने वाली सबसे बड़ी वैल्यू ढूंढनी होती है। व्यवस्था की शर्त यह है कि सम और विषम संख्याओं का क्रम समान रहना चाहिए यानी सभी सम संख्याओं का क्रम नहीं बदला जा सकता।

आइए एक उदाहरण लेकर इस अवधारणा को बेहतर ढंग से समझते हैं:

इनपुट: {17, 80, 99, 27, 14, 22} 
आउटपुट: 801799271422 
व्याख्या: सम और विषम संख्याओं का क्रम है: 
सम: 80 14 22 
विषम: 17 99 27

यहां 99 सबसे बड़ी संख्या है लेकिन विषम संख्याओं के क्रम में 17 इससे पहले आता है इसलिए हमने पहले 80 पर विचार किया और फिर व्यवस्था का क्रम क्रमिक रूप से इस तरह बनाया: 80 17 99 27 14 22

चूंकि हमने समस्या को समझ लिया है, आइए इसका समाधान उत्पन्न करने का प्रयास करें। यहां हम शास्त्रीय अवरोही क्रम के लिए नहीं जा सकते क्योंकि सम और विषम के क्रम के बारे में एक प्रतिबंध परिभाषित है। इसलिए हमें इस क्रम को बनाए रखना होगा और सम और विषम क्रम के पहले एलिमेंट्स में से बड़े की जांच करनी होगी। और फिर उसी तरह आगे बढ़ें। आइए एक एल्गोरिदम देखें जो इसे और स्पष्ट करेगा।

एल्गोरिदम

चरण 1: दो संरचनाएं बनाएं, एक सम के लिए दूसरी विषम के लिए, यह क्रम को बनाए रखेगा। 
चरण 2: प्रत्येक संरचना से एक एलिमेंट लें और जांचें कि कौन सा संयोजन बड़ी संख्या बनाता है। उदाहरण के लिए, यदि E सम संख्या है और O विषम संख्या है जो संरचना के शीर्ष पर हैं। फिर हम जांचेंगे कि EO और OE में से कौन बड़ा है। 
चरण 3: बड़े संयोजन को अंतिम अनुक्रम में रखें। 
चरण 4: अंतिम अनुक्रम प्रिंट करें।

उदाहरण

अब, आइए इस एल्गोरिदम पर आधारित एक प्रोग्राम बनाते हैं।

#include <bits/stdc++.h> 
using namespace std; 

string merge(vector<string> arr1, vector<string> arr2) { 
    int n1 = arr1.size(); 
    int n2 = arr2.size(); 
    int i = 0, j = 0; 
    string big = ""; 
    while (i < n1 && j < n2) { 
        if ((arr1[i] + arr2[j]).compare((arr2[j] + arr1[i])) > 0) 
            big += arr1[i++]; 
        else 
            big += arr2[j++]; 
    } 
    while (i < n1) 
        big += arr1[i++]; 
    while (j < n2) 
        big += arr2[j++]; 
    return big; 
} 

string largestNumber(vector<string> arr, int n) { 
    vector<string> even, odd; 
    for (int i = 0; i < n; i++) { 
        int lastDigit = arr[i].at(arr[i].size() - 1) - '0'; 
        if (lastDigit % 2 == 0) 
            even.push_back(arr[i]); 
        else 
            odd.push_back(arr[i]); 
    } 
    string biggest = merge(even, odd); 
    return biggest; 
} 

int main() { 
    vector<string> arr; 
    arr.push_back("17"); 
    arr.push_back("80"); 
    arr.push_back("99"); 
    arr.push_back("27"); 
    arr.push_back("14"); 
    arr.push_back("22"); 
    int n = arr.size(); 
    cout << "Biggest possible number from the array is = " << largestNumber(arr, n); 
    return 0; 
}

आउटपुट

Biggest possible number from the array is = 801799271422

  1. C++ में डुडनी नंबर (Dudeney Numbers) C++ में डुडनी नंबर (Dudeney Numbers)

    संख्या सिद्धांत में परिभाषित एक गणितीय संख्या एक दी गई संख्या आधार में एक प्राकृतिक संख्या है जो दूसरी प्राकृतिक संख्या के पूर्ण घन के बराबर होती है जैसे कि पहली प्राकृतिक संख्या का अंक योग दूसरी संख्या के अंक योग के बराबर होता है (विकिपीडिया)। इस संख्या की खोज हेनरी डुडनी ने की थी। इसका गणितीय सू

  1. - C++ प्रोग्राम: सशर्त स्टेटमेंट का उपयोग किए बिना "सम" या "विषम" प्रिंट करना

    इस खंड में हम देखेंगे कि किसी भी प्रकार के सशर्त स्टेटमेंट (<, <=, !=, >, >=, ==) का उपयोग किए बिना किसी संख्या की विषम या सम जांच कैसे करें। हम सशर्त स्टेटमेंट का उपयोग करके आसानी से विषम या सम की जांच कर सकते हैं। हम संख्या को 2 से विभाजित कर सकते हैं, फिर जांच सकते हैं कि शेष 0 है या

  1. - C++ प्रोग्राम: जांचें कि संख्या सम (Even) है या विषम (Odd)

    परिचयएक संख्या सम होती है यदि यह दो से विभाज्य होती है और विषम होती है यदि यह दो से विभाज्य नहीं होती। कुछ सम संख्याएं हैं - 2, 4, 6, 8, 10, 12, 14, 16 कुछ विषम संख्याएं हैं - 1, 3, 5, 7, 9, 11, 13, 15, 17 मॉड्यूलस का उपयोग करके सम/विषम जांचेंउदाहरण#include <iostream> using namespace std; int