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

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

इस समस्या में, हमें संख्याओं की एक सरणी दी जाती है और हमें सबसे बड़ा मान ज्ञात करना होता है जिसे एक निश्चित तरीके से बदलकर बनाया जा सकता है। व्यवस्था के लिए शर्त यह है कि सम संख्याओं और विषम संख्याओं का क्रम समान रहेगा अर्थात सभी सम संख्याओं का क्रम नहीं बदला जा सकता है।

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

Input : {17, 80, 99, 27, 14 , 22}
Output: 801799271422
Explanation: the order of Even and Odd numbers is :
Even : 80 14 22
Odd : 17 99 27

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

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

एल्गोरिदम

Step 1 : Create two structures, one for even other for odd, this will maintain the sequence.
Step 2 : Take one element from each structure and check
         which combination makes a large number. Example, if E is
         the even number and O is the odd number which are at the
         top of the structure. then we will check which one is Greater of EO and OE.
Step 3 : Place the greater combination into the final sequence.
Step 4 : Print the final sequence.

उदाहरण

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

#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. सी++ में डुडेनी नंबर्स

    संख्या सिद्धांत में परिभाषित एक गणितीय संख्या (विकिपीडिया)। नंबर हेनरी डुडेनी . द्वारा खोजा गया था . इसका गणितीय सूत्र है - यहाँ, हमें एक पूर्णांक n दिया गया है। हमारा काम जांच करना है कि दिया गया नंबर n एक डुडनी नंबर है या नहीं। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: एन =17592 आ

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

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

  1. C++ प्रोग्राम यह जांचने के लिए कि संख्या सम है या विषम

    एक संख्या तब भी होती है जब वह दो से विभाज्य हो और विषम हो यदि वह दो से विभाज्य न हो। कुछ सम संख्याएँ हैं - 2, 4, 6, 8, 10, 12, 14, 16 कुछ विषम संख्याएँ हैं - 1, 3, 5, 7, 9, 11, 13, 15, 17 मापांक का उपयोग करके जांचें कि संख्या सम है या विषम है मापांक का उपयोग करके संख्या सम या विषम है या नहीं यह ज