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

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


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

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

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

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

n := A का आकार ret := 0 sum := 0 A के प्रत्येक ai के लिए, करें nsum := sum + ai यदि s > 0, तो: यदि nsum <= 0, तो: ret := ret + |nsum| ai := ai + |nsum| अन्यथा यदि nsum >= 0, तो: ret := ret + nsum + 1 ai := ai - (nsum + 1) sum := sum + ai s := s * -1 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 में जोड़ा जाता है। इसके बाद Ops[i] को K में तब तक जोड़ते हैं जब तक K < 0 न हो जाए। ज

  1. - C++ में दो संख्याओं के सामान्य भाजकों की संख्या गिनने का प्रोग्राम

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

  1. - दिए गए प्रीफिक्स एक्सप्रेशन के लिए C++ में एक्सप्रेशन ट्री का निर्माण

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