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

C++ में n के सभी भाजक में अंकों का सबसे बड़ा योग ज्ञात कीजिए

इस समस्या में, हमें एक पूर्णांक 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

  1. सी ++ में एक पेड़ में सबसे बड़ा सबट्री योग खोजें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम पेड़ में सबसे बड़ा सबट्री योग खोजना है। समस्या का विवरण: बाइनरी ट्री में सकारात्मक और साथ ही नकारात्मक मान होते हैं। और हमें उस सबट्री को खोजने की जरूरत है जिसमें नोड्स की अधिकतम राशि हो। समस्या को समझने के लिए एक उदाहरण लेते हैं,

  1. C++ में किसी संख्या के भाज्य में अंकों का योग ज्ञात कीजिए

    मान लीजिए, हमारे पास एक संख्या n है, तो हमारा काम अंकों का योग ज्ञात करना है! n =5 पर विचार करें, फिर n! =120. तो परिणाम 3 होगा। इस समस्या को हल करने के लिए, हम फैक्टोरियल अंकों को स्टोर करने के लिए एक वेक्टर बनाएंगे और इसे 1 से शुरू करेंगे। फिर वेक्टर में 1 से n को एक-एक करके गुणा करें। अब वेक्टर म

  1. C++ में किसी सरणी के सभी अलग-अलग सबसेट (या बाद के) योग खोजें

    मान लीजिए कि हमारे पास पूर्णांकों का एक सेट है। दिए गए समुच्चयों के उपसमुच्चय से बनने वाले विशिष्ट योग ज्ञात कीजिए और उन्हें आरोही क्रम में मुद्रित कीजिए। सरणी तत्वों का योग छोटा है। विचार करें कि सरणी तत्व [1, 2, 3] जैसे हैं। आउटपुट 0, 1, 2, 3, 4, 5, 6 होगा। विशिष्ट उपसमुच्चय {}, {1}, {2}, {3}, {1,