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

C++ में पृष्ठों की न्यूनतम संख्या आवंटित करें

पृष्ठों की न्यूनतम संख्या आवंटित करना एक प्रोग्रामिंग समस्या है। आइए इस समस्या पर विस्तार से चर्चा करें और देखें कि इसका समाधान क्या हो सकता है।

बयान

आपको n विभिन्न पुस्तकों के पृष्ठों की संख्या . दी गई है . साथ ही, मी छात्र . भी हैं जिन्हें किताबें सौंपी जानी हैं। पुस्तकों को पृष्ठों की संख्या के आरोही क्रम में व्यवस्थित किया गया है। और प्रत्येक विद्यार्थी को कुछ क्रमागत पुस्तकें दी जा सकती हैं। कार्यक्रम को एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या लौटानी चाहिए जो न्यूनतम होनी चाहिए।

आइए इस समस्या को बेहतर तरीके से समझने के लिए एक उदाहरण लेते हैं,

Input : books[] = {13 , 43, 65, 87, 92}
   m = 2
Output : 179

स्पष्टीकरण

इस समस्या में हमारे पास दो विद्यार्थी हैं जो पुस्तकें पढ़ रहे हैं। तो, उनके बीच पुस्तकों को वितरित करने के निम्नलिखित तरीके हो सकते हैं।

केस 1 - [13] , [43, 65, 87, 92 ]

इससे एक छात्र द्वारा पढ़े जाने वाले पृष्ठों की अधिकतम संख्या 13/287 हो जाती है

केस 2 - [13, 43] , [65, 87,92]

इससे एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या 56/244 हो जाती है

केस 3 - [13, 43 , 65] , [87, 92]

इससे एक छात्र द्वारा पढ़े जाने वाले पृष्ठों की अधिकतम संख्या 121/179 हो जाती है

केस 4 - [13, 43 , 65 , 87] , [92]

इससे एक छात्र द्वारा पढ़े जाने वाले पृष्ठों की अधिकतम संख्या 208/92 हो जाती है

इन सभी 4 मामलों में से, परिणाम 179 है

इस उदाहरण ने आपको समस्या स्पष्ट कर दी होगी। आइए अब इसके पीछे के तर्क को समझते हैं और इसके लिए एक प्रोग्राम बनाते हैं।

इस समस्या को हल करने के लिए बाइनरी सर्च एल्गोरिथम का उपयोग करना एक आसान तरीका है। इस द्विआधारी खोज दृष्टिकोण के लिए, न्यूनतम और अधिकतम पृष्ठों की संख्या को 0 और सभी पुस्तकों के पृष्ठों के योग के रूप में प्रारंभ करें। और फिर इन मानों के मध्य को मध्यवर्ती परिणाम के रूप में ठीक करें जो एल्गो के आगे बढ़ने पर बदल जाएगा।

अब, मध्य-मान का उपयोग करके हम अंतिम समाधान खोजने की संभावना खोजने का प्रयास करेंगे। यदि वर्तमान मध्य में समाधान बनने की संभावना है, तो निचला आधा यानि न्यूनतम से मध्य खोज रहा है। अगर यह केस सही नहीं है तो बाकी आधे यानी मिड से मैक्सिमम तक सर्च किया जाता है।

इस समस्या का समाधान खोजने के लिए इस पद्धति का उपयोग किया जा सकता है, लेकिन जैसे-जैसे छात्रों की संख्या बढ़ती है, यह एल्गोरिथम कम विश्वसनीय समाधान प्रदान करता है।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
bool isPossible(int arr[], int n, int m, int curr_min) ;
int min_pages(int arr[], int n, int m) ;
int main(){
   int n = 5;
   int books[] = {13 , 43, 65, 87, 92};
   cout<<"The number of page in books are :\n";
   for(int i = 0 ; i< n; i++){
      cout<<books[i]<<"\t";
   }
   int m = 2;
   cout<<"\nMinimum number of pages = "<<min_pages(books, n, m)<<endl;
   return 0;
}
bool isPossible(int arr[], int n, int m, int curr_min){
   int studentsRequired = 1;
   int curr_sum = 0;
   for (int i = 0; i < n; i++){
      if (arr[i] > curr_min)
         return false;
      if (curr_sum + arr[i] > curr_min){
         studentsRequired++;
         curr_sum = arr[i];
         if (studentsRequired > m)
            return false;
      }
      else
         curr_sum += arr[i];
   }
   return true;
}
int min_pages(int arr[], int n, int m){
   long long sum = 0;
   if (n < m)
      return -1;
   for (int i = 0; i < n; i++)
      sum += arr[i];
   int minimum = 0, maximum = sum;
   int result = INT_MAX;
   while (minimum <= maximum){
      int mid = (minimum + maximum) / 2;
      if (isPossible(arr, n, m, mid)){
         result = min(result, mid);
         maximum = mid - 1;
      }
      else
         minimum = mid + 1;
   }
   return result;
}

आउटपुट

The number of page in books are :
13 43 65 87 92
Minimum number of pages = 179

  1. C++ में अंकगणित संख्या

    अंकगणितीय संख्या एक ऐसी संख्या है जिसमें सभी धनात्मक भाजक का औसत एक पूर्णांक होता है अर्थात संख्या n के लिए यदि भाजक की संख्या भाजक के योग को विभाजित कर सकती है तो n एक अंकगणितीय संख्या है। आइए अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, Input : n = 6 Output : YES Explanation : Divisor

  1. सी ++ में तर्कों की परिवर्तनीय संख्या

    कभी-कभी, आप एक ऐसी स्थिति में आ सकते हैं, जब आप एक ऐसा फ़ंक्शन करना चाहते हैं, जो पैरामीटर की पूर्वनिर्धारित संख्या के बजाय तर्कों की चर संख्या, यानी पैरामीटर ले सकता है। सी/सी++ प्रोग्रामिंग भाषा इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक फ़ंक्शन को परिभाषित करने की अनुमति है जो आपकी आवश्

  1. C++ में CHAR_BIT

    CHAR_BIT चार में बिट्स की संख्या है। इसे C++ भाषा में “limits.h” हेडर फाइल में घोषित किया गया है। यह 8-बिट प्रति बाइट का होता है। यहाँ C++ भाषा में CHAR_BIT का एक उदाहरण दिया गया है, उदाहरण #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a