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

जाँच करें कि क्या C++ में एक बड़ी संख्या को समान योग के दो या दो से अधिक खंडों में विभाजित किया जा सकता है

यहां हम एक प्रोग्राम देखेंगे, जो यह जांच सकता है कि क्या किसी संख्या को बराबर योग के साथ एक से अधिक खंडों में विभाजित किया जा सकता है। मान लीजिए कि कोई संख्या 74325 के समान है, तो इसे तीन भागों (7), (4, 3), (2, 5) में विभाजित किया जा सकता है, सभी समान मान के हैं।

इस समस्या को हल करने के लिए हमें इन चरणों का पालन करना होगा।

  • संख्या को स्ट्रिंग के रूप में लें
  • सरणी का उपसर्ग योग रखने के लिए सरणी का उपयोग करें
  • अब दूसरे एलिमेंट से लास्ट एलिमेंट तक जा रहे हैं, और पहला सेगमेंट 0 से i-1 तक होगा, जिसका योग prefix_sum[i - 1] पर रखा जाएगा
  • एक अन्य चर का उपयोग करें जो 1 से n तक जाता है, फिर योग जोड़ते रहें।
  • यदि योग मान किसी भी स्तर पर उपसर्ग_योग [i - 1] के समान है, तो खंड का योग पहले के बराबर है।
  • सेगमेंट योग मान को 0 के रूप में इनिशियलाइज़ करें, फिर पॉइंटर को मूव करते रहें।
  • यदि किसी भी स्तर पर खंड योग उपसर्ग_योग [i - 1] से अधिक है तो लूप को तोड़ दें
  • यदि हम अंतिम गंतव्य पर पहुँचते हैं, और यदि अंतिम खंड का योग पहले खंड के योग के समान है, तो इसे समान योग के खंडों में विभाजित किया जा सकता है।

उदाहरण

#include <iostream>
using namespace std;
bool canBeSegmented(string str) {
   int n = str.length();
   int prefix_sum[n];
   prefix_sum[0] = str[0] - '0';
   for (int i = 1; i < n; i++) {
      prefix_sum[i] = prefix_sum[i - 1] + (str[i] - '0');
   }
   for (int i = 1; i <= n - 1; i++) {
      int sum = prefix_sum[i - 1];
      int prev_sum = 0;
      int it = i;
      bool flag = false;
      while (it < n) {
         prev_sum += str[it] - '0';
         if (prev_sum == sum) {
            prev_sum = 0;
            flag = true;
         } else if (prev_sum > sum) {
            break;
         }
         it++;
      }
      if (prev_sum == 0 && it == n && flag) {
         return true;
      }
   }
   return false;
}
int main() {
   string s = "74325";
   if (canBeSegmented(s))
      cout << "Yes, This can be segmented into more than two segments";
   else
      cout << "No, This can not be segmented into more than two segments";
}

आउटपुट

Yes, This can be segmented into more than two segments

  1. जांचें कि क्या किसी संख्या को C++ में 2 त्रिकोणीय संख्याओं के योग के रूप में दर्शाया जा सकता है

    इस भाग में हम देखेंगे कि क्या हम एक संख्या को दो त्रिभुजाकार संख्याओं के योग के रूप में व्यक्त कर सकते हैं या नहीं। त्रिकोणीय संख्याएं नीचे की तरह हैं - उदाहरण से हम देख सकते हैं कि 1, 3, 6, 10 कुछ त्रिभुजाकार संख्याएँ हैं। हमें एक संख्या N (मान लीजिए 16) को दो त्रिभुजाकार संख्याओं (6, 10) के योग

  1. C++ प्रोग्राम यह जांचने के लिए कि क्या किसी संख्या को दो अभाज्य संख्याओं के योग के रूप में व्यक्त किया जा सकता है

    यह जांचने के लिए एक उदाहरण निम्नलिखित है कि क्या किसी संख्या को दो अभाज्य संख्याओं के योग के रूप में व्यक्त किया जा सकता है। उदाहरण #include <iostream> using namespace std; int func(int num) {    int i;    int flag = 1;    for(i = 2; i <= num/2; ++i) {   &

  1. जांचें कि क्या 1s और 2s की एक सरणी को समान योग के साथ 2 भागों में पायथन में विभाजित किया जा सकता है

    मान लीजिए कि हमारे पास एक सरणी संख्या है जो इसमें केवल 1 और 2 संग्रहीत करती है। हमें यह जांचना होगा कि क्या सरणी को दो अलग-अलग भागों में विभाजित किया जा सकता है जैसे कि प्रत्येक भाग में तत्वों का योग समान हो। इसलिए, यदि इनपुट संख्या =[1, 1, 2, 2, 2] की तरह है, तो आउटपुट सही होगा क्योंकि हम इस सरणी