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

C++ प्रोग्राम दी गई शर्तों के लिए कम से कम कितने ऑपरेशनों की आवश्यकता है, यह गिनने के लिए

मान लीजिए कि हमारे पास एन तत्वों के साथ एक सरणी ए है। प्रत्येक ऑपरेशन में, हम एक तत्व चुनते हैं और इसे 1 से बढ़ाते या घटाते हैं। हमें कम से कम यह पता लगाना होगा कि निम्नलिखित शर्तों को पूरा करने के लिए कितने ऑपरेशन की आवश्यकता है -

  • 1 से n तक के प्रत्येक i के लिए, 1 से ith पद तक के पदों का योग 0 नहीं है

  • 1 से n - 1 तक के प्रत्येक i के लिए, 1 से ith पद तक के पदों का चिह्न 1 से (i+1)वें पद तक के पदों के योग के चिह्न से भिन्न होता है।

इसलिए, यदि इनपुट ए =[1, -3, 1, 0] जैसा है, तो आउटपुट 4 होगा, क्योंकि हम अनुक्रम को 1, -2, 2, -2 जैसे चार ऑपरेशनों से बदल सकते हैं। पहले एक, दो, तीन और चार पदों का योग 1, -1, 1 और -1 है।

कदम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

n := size of A
ret := 0
sum := 0
for each ai in A, do
   nsum := sum + ai
   if s > 0, then:
      if nsum <= 0, then:
         ret := ret + |nsum|
         ai := ai + |nsum|
      Otherwise
         if nsum >= 0, then:
            ret := ret + nsum + 1
            ai := ai - (nsum + 1)
      sum := sum + ai
      s := s * -1
return ret

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;

int util(vector<int> A, int s){
   int n = A.size();
   int ret = 0;
   int sum = 0;
   for (int ai : A){
      int nsum = sum + ai;
      if (s > 0){
         if (nsum <= 0){
            ret += abs(nsum) + 1;
            ai = ai + abs(nsum) + 1;
         }
      } else{
         if (nsum >= 0){
            ret += nsum + 1;
            ai = ai - (nsum + 1);
         }
      }
      sum += ai;
      s *= -1;
   }
   return ret;
}
int solve(vector<int> A){
   int res = min(util(A, 1), util(A, -1));
   return res;
}
int main(){
   vector<int> A = { 1, -3, 1, 0 };
   cout << solve(A) << endl;
}

इनपुट

{ 1, -3, 1, 0 }

आउटपुट

4

  1. C++ में दी गई संख्या को कम करने के लिए आवश्यक संक्रियाओं की संख्या की गणना करें

    हमें एक धनात्मक पूर्णांक K और एक सरणी Ops[] दी गई है जिसमें पूर्णांक हैं। लक्ष्य K को कम करने के लिए आवश्यक संचालन की संख्या का पता लगाना है ताकि यह 0 से कम हो जाए। संचालन हैं - पहला ऑपरेशन K + Ops[0] है, पहला तत्व K में जोड़ा गया है 1 के बाद Ops[i] को K से K<0 तक जोड़ें। जहां सूचकांक I एक गोल

  1. C++ दो संख्याओं के सामान्य भाजक के लिए कार्यक्रम?

    यहां हम देखेंगे कि हम दो संख्याओं के उभयनिष्ठ भाजक की संख्या कैसे प्राप्त कर सकते हैं। हमें सभी उभयनिष्ठ भाजक नहीं मिलेंगे, लेकिन हम यह गिनेंगे कि कितने उभयनिष्ठ भाजक हैं। यदि दो संख्याएँ 12 और 24 की तरह हैं, तो उभयनिष्ठ भाजक 1, 2, 3, 4, 6, 12 हैं। अतः 6 उभयनिष्ठ भाजक हैं, इसलिए उत्तर 6 होगा। एल्गोर

  1. सी ++ प्रोग्राम किसी दिए गए उपसर्ग अभिव्यक्ति के लिए एक अभिव्यक्ति वृक्ष का निर्माण करने के लिए

    एक्सप्रेशन ट्री मूल रूप से एक बाइनरी ट्री है जिसका उपयोग एक्सप्रेशन को दर्शाने के लिए किया जाता है। एक्सप्रेशन ट्री में, आंतरिक नोड्स ऑपरेटरों के अनुरूप होते हैं और प्रत्येक लीफ नोड ऑपरेंड के अनुरूप होते हैं। इन-ऑर्डर, प्री-ऑर्डर और पोस्ट-ऑर्डर ट्रैवर्सल में एक्सप्रेशन एक्सप्रेशन के लिए एक्सप्रेशन ट