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

C++ में वितरित किए जाने वाले टेडी की कुल संख्या को कम करें

समस्या कथन

छात्रों की N संख्या और एक सरणी दी गई है जो छात्रों द्वारा प्राप्त अंक का प्रतिनिधित्व करती है। स्कूल ने उन्हें कीमत के तौर पर टेडी देने का फैसला किया है। होवर, स्कूल पैसे बचाना चाहता है, इसलिए वे निम्नलिखित बाधाओं को लागू करके वितरित किए जाने वाले टेडी की कुल संख्या को कम करने के लिए -

  • सभी छात्रों को कम से कम एक टेडी अवश्य मिलना चाहिए
  • यदि दो छात्र एक दूसरे के बगल में बैठे हैं तो उच्च अंक वाले छात्र को अधिक अंक प्राप्त करने होंगे
  • यदि दो छात्रों के अंक समान हैं तो उन्हें अलग-अलग संख्या में टेडी प्राप्त करने की अनुमति है

उदाहरण

मान लीजिए कि 3 छात्र हैं और प्राप्त अंकों को -

. के रूप में सरणी में दर्शाया गया है
arr[] = {2, 3, 3}
So, total number of teddies to be distributed:
{1, 2, 1} i.e. 4 teddies

एल्गोरिदम

डायनेमिक प्रोग्रामिंग का उपयोग करके इस समस्या को हल किया जा सकता है -

1. Create a table of size N and initialize it with 1 as each student must get atleast one teddy
2. Iterate over marks array and perform below step:
   a. If current student has more marks than previous student then:
      i. Get the number of teddies given to the previous student
      ii. Increment teddie count by 1
   b. If current student has lesser marks than previous student then:
      i. Review and change all the values assigned earlier

उदाहरण

#include <iostream>
#include <algorithm>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int teddieDistribution(int *marks, int n) {
   int table[n];
   fill(table, table + n, 1);
   for (int i = 0; i < n - 1; ++i) {
      if (marks[i + 1] > marks[i]) {
         table[i + 1] = table[i] + 1;
      } else if (marks[i] > marks[i + 1]) {
         int temp = i;
         while (true) {
            if (temp >= 0 && (marks[temp] >
            marks[temp + 1])) {
               if (table[temp] >
               table[temp + 1]) {
                  --temp;
                  continue;
               } else {
                  table[temp] =
                  table[temp + 1] + 1;
                  --temp;
               }
            } else {
               break;
            }
         }
      }
   }
   int totalTeddies = 0;
   for (int i = 0; i < n; ++i) {
      totalTeddies += table[i];
   }
   return totalTeddies;
}
int main() {
   int marks[] = {2, 6, 5, 2, 3, 7};
   int totalTeddies = teddieDistribution(marks,
   SIZE(marks));
      cout << "Total teddies to be distributed: " <<
   totalTeddies << "\n";
      return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

Total teddies to be distributed: 12

  1. सी ++ का उपयोग कर ओपनसीवी में फ्रेम की कुल संख्या की गणना कैसे करें?

    हम सीखेंगे कि OpenCV में फ़्रेम की कुल संख्या की गणना कैसे करें। ओपनसीवी का उपयोग करते हुए, वीडियो के फ्रेम की कुल संख्या को गिनना और दिखाना प्राथमिक है। हालाँकि, आपको एक बात ध्यान में रखनी होगी कि हम वास्तविक समय के वीडियो फ्रेम की कुल संख्या की गणना नहीं कर सकते। क्योंकि रीयल-टाइम वीडियो में निश्च

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

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

  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