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

चॉकलेट को C++ में विभाजित करें

मान लीजिए हमारे पास एक चॉकलेट बार है जिसमें कुछ टुकड़े हैं। प्रत्येक खंड में इसकी अपनी मिठास होती है जिसे मिठास नामक सूची द्वारा दिया जाता है। अगर हम K दोस्तों के बीच चॉकलेट बांटना चाहते हैं तो हम K कट्स का उपयोग करके चॉकलेट बार को K+1 पीस में काटना शुरू करते हैं, अब प्रत्येक पीस में कुछ लगातार टुकड़े होते हैं। अगर हम कम से कम कुल मिठास के साथ टुकड़ा निकालते हैं और बाकी के टुकड़े अपने दोस्तों को देते हैं। हमें चॉकलेट बार को बेहतर तरीके से काटकर उस टुकड़े की अधिकतम कुल मिठास का पता लगाना होगा जो हम प्राप्त कर सकते हैं।

इसलिए, यदि इनपुट मिठास की तरह है =[1,2,3,4,5,6,7,8,9], K =5, तो आउटपुट 6 होगा क्योंकि आप चॉकलेट को [1,2 में विभाजित कर सकते हैं ,3], [4,5], [6], [7], [8], [9] ये टुकड़े।

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

  • फ़ंक्शन को परिभाषित करें ठीक (), यह एक सरणी v, कट्स, मैक्सवैल,

    लेगा
  • काउंटर:=0, अस्थायी:=0

  • इनिशियलाइज़ i :=0 के लिए, जब i <=v का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • अगर अस्थायी>=मैक्सवैल, तो

      • (काउंटर 1 से बढ़ाएं)

      • अस्थायी:=0

    • यदि i, v के आकार के समान है, तो -

      • लूप से बाहर आएं

    • अस्थायी:=अस्थायी + वी[i]

  • काउंटर>=कट्स

    . होने पर सही लौटें
  • मुख्य विधि से निम्न कार्य करें:

  • मैक्सा:=-1

  • n :=s का आकार

  • निम्न :=0, उच्च :=0

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • निम्न :=न्यूनतम निम्न और s[i]

    • उच्च:=उच्च + एस[i]

  • (उच्च 1 से बढ़ाएँ)

  • जबकि कम <उच्च, करें -

    • मध्य :=निम्न + (उच्च - निम्न + 1) / 2

    • यदि ओके(एस, के + 1, मिड) सत्य है, तो -

      • कम :=मध्य

    • अन्यथा

      • उच्च :=मध्य - 1

  • कम वापसी

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool ok(vector <int> v, int cuts, int maxVal){
      int counter = 0;
      int temp = 0;
      for (int i = 0; i <= v.size(); i++) {
         if (temp >= maxVal) {
            counter++;
            temp = 0;
         }
         if (i == v.size()) {
            break;
         }
         temp += v[i];
      }
      return counter >= cuts;
   }
   int maximizeSweetness(vector<int>& s, int k) {
      int maxa = -1;
      int n = s.size();
      int low = 0;
      int high = 0;
      for (int i = 0; i < n; i++) {
         low = min(low, s[i]);
         high += s[i];
      }
      high++;
      while (low < high) {
         int mid = low + (high - low + 1) / 2;
         if (ok(s, k + 1, mid))
            low = mid;
         else
            high = mid - 1;
      }
      return low;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,7,8,9};
   cout << (ob.maximizeSweetness(v, 5));
}

इनपुट

{1,2,3,4,5,6,7,8,9}, 5

आउटपुट

6

  1. C++ में 2D मैट्रिक्स खोजें

    मान लीजिए कि हमने एक m x n मैट्रिक्स में मान की खोज करने के लिए एक कुशल एल्गोरिदम लिखा है। इस मैट्रिक्स में नीचे की तरह कुछ गुण हैं - प्रत्येक पंक्ति को बाएं से दाएं क्रमबद्ध किया जाता है प्रत्येक पंक्ति की पहली संख्या पिछली पंक्ति के अंतिम पूर्णांक से अधिक है। तो अगर मैट्रिक्स की तरह है - 1 3 5

  1. C++ में दो पूर्णांकों को विभाजित करें

    मान लीजिए कि हमारे पास दो पूर्णांक लाभांश और भाजक हैं। हमें दो पूर्णांकों को गुणा, भाग और मॉड ऑपरेटर का उपयोग किए बिना विभाजित करना होगा। भाज्य को भाजक से भाग देने के बाद भागफल लौटाएँ। पूर्णांक विभाजन शून्य की ओर छोटा होना चाहिए। दोनों इनपुट पूर्णांक हैं अतः यदि दिए गए इनपुट लाभांश =7, भाजक =-3 हैं

  1. सी ++ में शून्य त्रुटि से विभाजित कैसे करें?

    शून्य त्रुटि से भाग को पकड़ने के लिए निम्नलिखित एक उदाहरण है। उदाहरण #include <iostream> using namespace std; int display(int x, int y) {    if( y == 0 ) {       throw "Division by zero condition!";    }    return (x/y); } int main () { &n