इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा कार्य n के सभी भाजक में अंकों का सबसे बड़ा योग ज्ञात करना है।
समस्या का विवरण: यहाँ, हम उस संख्या n का भाजक ज्ञात करेंगे जिसके अंकों का योग सबसे बड़ा है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: 18
आउटपुट: 9
स्पष्टीकरण:
18 के सभी भाजक 1, 2, 3, 6, 9, 18 हैं।
अधिकतम अंकों का योग 9 है।
समाधान दृष्टिकोण
संख्या N के सभी भाजक ज्ञात कीजिए। और फिर प्रत्येक भाजक के अंकों का योग ज्ञात कीजिए और फिर सबसे बड़े योग के साथ मान लौटाइए।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; int calcDigitSum(int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n/10; } return sum; } int largestDigitSumdivisior(int n) { int maxSum = 0; for (int i = 1; i <= n; i++) if (n % i == 0) maxSum = max(maxSum, calcDigitSum(i)); return maxSum; } int main() { int n = 45; cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl; return 0; }
आउटपुट
The divisor with largest sum of digits is 9
भाजक को खोजने के लिए विधि को संशोधित करके और इसे और अधिक प्रभावी बनाकर समाधान को और अधिक प्रभावी बनाया जा सकता है।
इस समस्या में, हम sqrt(n) तक पुनरावृति करेंगे और पाएंगे कि सभी भाजक और अन्य भाजक की गणना n/div का उपयोग करके की जाती है। यह विभाजकों को sqrt(n) में खोजने के लिए समय की जटिलता को कम करता है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; int calcDigitSum(int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n / 10; } return sum; } int largestDigitSumdivisior(int n) { int maxSum = 0; for (int i = 1; i*i <= n; i++) { if (n % i == 0) { maxSum = max(maxSum, calcDigitSum(i)); maxSum = max(maxSum,calcDigitSum(n/i)); } } return maxSum; } int main() { int n = 32; cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl; return 0; }
आउटपुट
The divisor with largest sum of digits is 8