इनपुट के रूप में एक पूर्णांक चर संख्या को देखते हुए। आइए किसी भी क्रम में 1 से संख्या तक के तत्वों वाले एक सरणी पर विचार करें। अगर हम किसी ऐरे पर एक ऑपरेशन Number-1 बार इस तरह से करते हैं कि
-
हम सरणी से दो तत्वों A और B का चयन करते हैं
-
ए और बी को ऐरे से निकालें
-
सरणी में A और B के वर्गों का योग जोड़ें
हमें अंत में एक पूर्णांक मान मिलेगा; लक्ष्य उस तत्व के लिए अधिकतम संभव मूल्य खोजना है।
प्राथमिकता कतार का उपयोग करना
-
अंतिम परिणाम को अधिकतम करने के लिए, हमें ए और बी को इस तरह चुनना होगा कि वे अधिकतम हों।
-
अधिकतम ए और बी खोजने के लिए, हम इसके अंदर तत्वों के मूल्यों को संग्रहीत करने के लिए प्राथमिकता कतार का उपयोग करेंगे।
-
एक प्राथमिकता कतार तत्वों को घटते क्रम में संग्रहीत करती है।
-
शीर्षतम तत्व मूल्य में सबसे बड़ा है और इसी तरह। तो दो तत्वों को पॉप करने के बाद हम उनके वर्गों को फिर से कतार में धकेल देंगे।
-
वांछित परिणाम प्राप्त करने के लिए नंबर - 1 बार पॉप और पुश करेगा।
उदाहरण
इनपुट - संख्या=2
आउटपुट - सरणी में कमी के बाद एकल तत्व:5
स्पष्टीकरण - मान लीजिए कि हमारे पास सरणी में तत्व हैं [ 1 2]
प्राथमिकता कतार में डालने के बाद-:2 1
ए=5, बी=4 :ए 2 +बी 2 =1+4=5
अंतिम तत्व:5
इनपुट - संख्या=5
आउटपुट - सरणी में कमी के बाद एकल तत्व:5
स्पष्टीकरण - मान लीजिए कि हमारे पास सरणी में तत्व हैं [ 5 1 2 4 3]
प्राथमिकता कतार में डालने के बाद-:5 4 3 2 1
ए=5, बी=4 :ए 2 +बी 2 =25+16=41 :41 3 2 1
ए=41, बी=3 :ए 2 +बी 2 =1681+9=1690 :1690 2 1
ए=1690, बी=2 :ए 2 +बी 2 =1681+4=2856104 :2856104 1
A=2856104 , B=1 :A 2 +बी 2 =1187163712+1=1187163713 :1187163713
अंतिम तत्व :1187163713
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
इस दृष्टिकोण में हम सरणी के तत्वों को घटते क्रम में संग्रहीत करने के लिए कतार को प्राथमिकता देंगे। शीर्ष दो सबसे बड़े तत्वों को पॉप करें और दोनों के वर्गों के योग को फिर से उस कतार में धकेलें। ऐसा तब तक करें जब तक कि केवल एक मान न बचे।
-
इनपुट वेरिएबल नंबर लें।
-
परिणामों के लिए लंबे पूर्णांकों के रूप में डेटा प्रकार लें - lli
-
फ़ंक्शन कम करेंअरे (int Num) इनपुट नंबर लेता है और उपरोक्त संचालन का उपयोग करके गणना की गई अधिकतम एकल पूर्णांक देता है।
-
प्राथमिकता कतार को pQueue के रूप में लें।
-
थोड़ी देर के लूप का उपयोग करके pQueue को संख्या 1 से N तक पॉप्युलेट करें।
-
जबकि i<=Num, i को pQueue पर पुश करें
-
अब pQueue में 1 से N तक के पूर्णांक घटते क्रम में हैं और आकार N है।
-
अब pQueue को थोड़ी देर के लूप का उपयोग करके तब तक पार करें जब तक कि उसका आकार> =1 न हो जाए।
-
अधिकतम को var1=pQueue.top() के रूप में लें और इसे पॉप करें।
-
अगले अधिकतम को var2=pQueue.top() के रूप में लें और इसे पॉप करें।
-
var1 को इसके वर्ग के रूप में और var2 को इसके वर्ग के रूप में सेट करें।
-
var1+var2 को फिर से pQueue पर पुश करें।
-
जबकि लूप के अंत में, शीर्ष तत्व लौटाएं।
-
परिणाम को मुख्य के अंदर प्रिंट करें।
उदाहरण
#include <bits/stdc++.h> using namespace std; #define lli long long int int reduceArray(int Num){ priority_queue<lli> pQueue; int i=1; while(i<=Num){ pQueue.push(i); i=i+1; } while (pQueue.size() > 1) { lli var1 = pQueue.top(); pQueue.pop(); lli var2 = pQueue.top(); pQueue.pop(); var1=var1*var1; var2=var2*var2; pQueue.push(var1+var2); } return pQueue.top(); } int main(){ int Number = 5; cout<<"Single element after array reduction: "<<reduceArray(Number); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा
Single element after array reduction: 1187163713