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

C++ कोड: कार्ड हटाने के बाद न्यूनतम योग प्राप्त करें


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

उदाहरण के लिए, यदि इनपुट T = [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  using namespace std; int solve(vector 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 T = { 7, 3, 7, 3, 20 };     cout << solve(T) << endl; }

इनपुट

{ 7, 3, 7, 3, 20 }

आउटपुट

26

  1. - C++ में न्यूनतम पथ योग (Minimum Path Sum)

    मान लीजिए हमारे पास एक m x n मैट्रिक्स है जो गैर-ऋणात्मक पूर्णांकों से भरा है। शीर्ष बाएं कोने से नीचे दाएं कोने तक एक पथ ढूंढें जो अपने पथ के साथ सभी संख्याओं के योग को न्यूनतम करता है। गति किसी भी समय केवल नीचे या दाएं हो सकती है। उदाहरण के लिए, यदि मैट्रिक्स इस तरह है: 131 151 421 आउटपुट 7 ह

  1. - C++ में N को बार-बार भाजक से विभाजित करने के बाद अधिकतम योग (Maximum sum after repeatedly dividing N by a divisor)

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

  1. - C++ में ट्रायंगल में न्यूनतम सम पथ

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