इस समस्या में, हमें आकार N का एक सरणी arr[] दिया जाता है जिसमें केवल एकल अंक होते हैं। हमारा काम है 2, 3 और 5 का सबसे बड़ा गुणज खोजना ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : arr[] = {1, 0, 5, 2} Output : 510
स्पष्टीकरण -
The number 510 is divisible by all 2, 3, 5.
समाधान दृष्टिकोण
समस्या का एक सरल समाधान है बनाई गई संख्या की मूल विभाज्यता की जाँच करना।
इसलिए, यदि संख्या को 2 और 5 से विभाज्य होने की आवश्यकता है अर्थात यह 10 से विभाज्य है। 10 से विभाज्य संख्या बनाने के लिए, सरणी में शून्य होना चाहिए।
यदि इसमें शून्य है, तो हम अंत में शून्य के साथ सबसे बड़ी संभव संख्या बनाएंगे जो 3 से विभाज्य है।
विधि यहाँ दिखाई गई है। C++ में तीन का सबसे बड़ा गुणज
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <bits/stdc++.h> using namespace std; class Solution { public: string largestMultipleOfThree(vector<int>& digits) { vector<vector<int>> d(3); int sum = 0; for (int i = 0; i < digits.size(); i++) { int x = digits[i]; d[x % 3].push_back(digits[i]); sum += x; sum %= 3; } if (sum) { if (!d[sum].size()) { int rem = 3 - sum; if (d[rem].size() < 2) return ""; d[rem].pop_back(); d[rem].pop_back(); } else { d[sum].pop_back(); } } string ret = ""; for (int i = 0; i < 3; i++) { for (int j = 0; j < d[i].size(); j++) { ret += to_string(d[i][j]); } } sort(ret.begin(), ret.end(), greater<int>()); if (ret.size() && ret[0] == '0') return "0"; return ret; } }; int main(){ Solution ob; vector<int> v = {7, 2, 0, 8}; sort(v.begin(), v.end(), greater<int>()); if(v[v.size() - 1 ] != 0){ cout<<"Not Possible!"; } else{ cout<<"The largest number is "<<(ob.largestMultipleOfThree(v)); } }
आउटपुट
The largest number is 870