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

C++ कोड त्यागने के बाद कार्ड की न्यूनतम राशि प्राप्त करने के लिए

मान लीजिए कि हमारे पास एक सरणी T में पाँच संख्याएँ हैं। पाँच कार्ड हैं और प्रत्येक कार्ड पर एक संख्या लिखी हुई है। ith कार्ड पर T[i] लिखा होता है। हम कुछ कार्डों को त्याग सकते हैं और हमारा लक्ष्य शेष संख्याओं पर लिखी गई संख्याओं के योग को कम करना है। उसे एक ही नंबर वाले दो या तीन कार्डों को एक बार छोड़ने की अनुमति है। यदि समान संख्या वाले दो या तीन कार्ड चुनना असंभव है, तो हम कार्ड नहीं छोड़ेंगे। हमें न्यूनतम संभव राशि ज्ञात करनी होगी।

इसलिए, यदि इनपुट टी =[7, 3, 7, 3, 20] जैसा है, तो आउटपुट 26 होगा, क्योंकि संख्या 7 के साथ दो कार्डों को हटाने से शेष राशि 3 + 3 + 20 =26 होगी।

कदम

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

n := 5
m := 0
Define an array k of size: 101 and fill with 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   a := T[i]
   m := m + a
   (increase k[a] by 1)
M := m
for initialize i := 0, when i < 101, update (increase i by 1), do:
   if k[i] > 1, then:
      M := minimum of M and (m - i * (minimum of 3 and k[i]))
return M

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> T)
{
   int n = 5, m = 0, a;
   int k[101] = { 0 };
   for (int i = 0; i < n; i++)
   {
      int a = T[i];
      m += a;
      k[a]++;
   }
   int M = m;
   for (int i = 0; i < 101; i++)
      if (k[i] > 1)
      {
         M = min(M, m - i * (min(3, k[i])));
      }
   return M;
}
int main()
{
   vector<int> T = { 7, 3, 7, 3, 20 };
   cout << solve(T) << endl;
}

इनपुट

{ 7, 3, 7, 3, 20 }

आउटपुट

26

  1. सी++ में न्यूनतम पथ योग

    मान लीजिए कि हमारे पास गैर-ऋणात्मक पूर्णांकों से भरा एक m x n मैट्रिक्स है, तो ऊपरी बाएं कोने से नीचे दाएं कोने तक एक पथ खोजें जो इसके पथ के साथ सभी संख्याओं के योग को कम करता है। आंदोलन किसी भी समय केवल नीचे या दाएं हो सकते हैं। तो उदाहरण के लिए, यदि मैट्रिक्स नीचे जैसा है 1 3 1 1 5 1 4 2 1 आ

  1. C++ में एक भाजक द्वारा N को बार-बार विभाजित करने के बाद अधिकतम योग

    इस समस्या में, हमें एक पूर्णांक N दिया जाता है। हमारा कार्य एक प्रोग्राम बनाना है जो N को C++ में एक भाजक द्वारा बार-बार विभाजित करने के बाद अधिकतम योग प्राप्त करेगा। कार्यक्रम विवरण - हम संख्या N को तब तक पुनरावर्ती रूप से विभाजित करेंगे जब तक कि वह एक न हो जाए और फिर सभी भाजक को जोड़ दें और सभी भ

  1. सी++ में त्रिभुज में न्यूनतम योग पथ

    समस्या कथन संख्याओं की त्रिकोणीय संरचना को देखते हुए, ऊपर से नीचे तक न्यूनतम पथ योग ज्ञात करें। प्रत्येक चरण में आप नीचे की पंक्ति में आसन्न संख्याओं पर जा सकते हैं। उदाहरण अगर इनपुट है -    5   7 3  8 1 2 9 6 4 5 फिर न्यूनतम योग 13 इस प्रकार है - 5 + 3 + 1 + 4 एल्गोरिदम गति