इस समस्या में, हमें आकार N की एक सरणी arr[] दी गई है जिसमें केवल एकल अंक होते हैं। हमारा कार्य 2, 3 और 5 का सबसे बड़ा गुणक ज्ञात करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट : arr[] = {1, 0, 5, 2} आउटपुट : 510 व्याख्या −
संख्या 510 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<<"संभव नहीं!"; } else{ cout<<"सबसे बड़ी संख्या है "<<(ob.largestMultipleOfThree(v)); } } आउटपुट
सबसे बड़ी संख्या है 870