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

C/C++ प्रोग्राम: न्यूनतम सिक्कों की संख्या ढूंढने के लिए लालची एल्गोरिदम


लालची एल्गोरिदम (Greedy Algorithm) एक एल्गोरिदम है जिसका उपयोग दी गई समस्या के लिए इष्टतम समाधान ढूंढने के लिए किया जाता है। लालची एल्गोरिदम प्रत्येक भाग के लिए स्थानीय रूप से इष्टतम समाधान (समस्या के एक भाग के लिए इष्टतम समाधान) ढूंढकर काम करता है ताकि वैश्विक इष्टतम समाधान ढूंढा जा सके।

इस समस्या में, हम दिए गए योग को बनाने के लिए आवश्यक न्यूनतम सिक्कों/नोटों की संख्या ढूंढने के लिए लालची एल्गोरिदम का उपयोग करेंगे। इसके लिए हम सभी वैध सिक्कों या नोटों यानी {1, 2, 5, 10, 20, 50, 100, 200, 500, 2000} के मूल्यवर्ग पर विचार करेंगे। और हमें इन सिक्कों/नोटों की संख्या लौटानी होगी जिनकी आवश्यकता योग बनाने के लिए होगी।

आइए कुछ उदाहरण लेकर संदर्भ को बेहतर ढंग से समझते हैं:

उदाहरण 1 −

इनपुट: 1231
आउटपुट: 7

व्याख्या − हमें दो 500 रुपये के नोट, दो 100 रुपये के नोट, एक 20 रुपये का नोट, एक 10 रुपये का नोट और एक 1 रुपये का सिक्का चाहिए। जो कुल 2+2+1+1+1 = 7 होता है।

उदाहरण 2 −

इनपुट: 2150
आउटपुट: 3

व्याख्या − हमें एक 2000 रुपये का नोट, एक 100 रुपये का नोट और एक 50 रुपये का नोट चाहिए।

इस समस्या को लालची एल्गोरिदम का उपयोग करके हल करने के लिए, हम ढूंढेंगे कि कौन सा सबसे बड़ा मूल्यवर्ग उपयोग किया जा सकता है। फिर हम सबसे बड़े मूल्यवर्ग को योग से घटाएंगे और तब तक वही प्रक्रिया दोहराएंगे जब तक योग शून्य न हो जाए।

एल्गोरिदम

इनपुट: sum, सिक्के = 0 इनिशियलाइज़ करें
चरण 1: सबसे बड़ा मूल्यवर्ग ढूंढें जिसका उपयोग किया जा सकता है यानी योग से छोटा।
चरण 2: मूल्यवर्ग को सिक्कों में जोड़ें और इसे योग से घटाएं
चरण 3: चरण 2 को तब तक दोहराएं जब तक योग 0 न हो जाए।
चरण 4: सिक्कों में प्रत्येक मान प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int notes[] = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 2000 };
int n = sizeof(notes) / sizeof(notes[0]);
void minchange(int sum){
    vector coins;
    for (int i = n - 1; i >= 0; i--) {
        while (sum >= notes[i]) {
            sum -= notes[i];
            coins.push_back(notes[i]);
        }
    }
    for (int i = 0; i < coins.size(); i++)
        cout << coins[i] << "\t";
}
int main(){
    int n = 3253;
    cout << "The minimum number of coins/notes that sum up " << n << " is \t ";
    minchange(n);
    return 0;
}

आउटपुट

The minimum number of coins/notes that sum up 3253 is 2000 500 500 200 50 2 1

  1. C/C++ प्रोग्राम: त्रिकोणीय माचिस संख्या C/C++ प्रोग्राम: त्रिकोणीय माचिस संख्या

    यहां हम देखेंगे कि नीचे दिखाए अनुसार पिरामिड बनाने के लिए कितनी माचिस की तीलियों की आवश्यकता है। पिरामिड का आधार दिया गया है। तो यदि आधार 1 है, तो पिरामिड बनाने के लिए 3 माचिस की तीलियों की आवश्यकता होगी, आधार 2 के लिए, 9 माचिस की तीलियों की आवश्यकता होगी, आधार आकार 3 के लिए, 18 माचिस की तीलियों की

  1. C++ प्रोग्राम किसी संख्या के विषम गुणनखंडों का योग ज्ञात करने के लिए C++ प्रोग्राम किसी संख्या के विषम गुणनखंडों का योग ज्ञात करने के लिए

    एक धनात्मक पूर्णांक दिया गया है और कार्य उस संख्या के विषम गुणनखंडों को उत्पन्न करना और दिए गए विषम गुणनखंडों का योग निकालना है। उदाहरण इनपुट: संख्या = 20 आउटपुट: विषम गुणनखंडों का योग है: 6 इनपुट: संख्या = 18 आउटपुट: विषम गुणनखंडों का योग है: 13 तो, परिणाम = 1 + 5 = 6 नीचे दिए गए प्रोग्राम में

  1. पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट एक नंबर इनपुट दिए जाने पर, दी गई संख्या के फैक्टर्स का न्यूनतम योग ढूंढें। यहां हम सभी फैक्टर्स और उनके संबंधित योग की गणना करेंगे और फिर उनमें से न्यूनतम ढूंढेंगे। तो संख्या के गुणनफल का न्यूनतम योग ढू