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

C++ में n को 0 तक घटाने के लिए आवश्यक ऑपरेशन्स की संख्या ढूंढने का प्रोग्राम

समस्या विवरण

मान लीजिए हमारे पास एक संख्या n है। अब एक ऑपरेशन पर विचार करें जहां हम या तो 1. n को एक से घटा सकते हैं 2. यदि n सम संख्या है, तो इसे n/2 से घटाएं 3. यदि n 3 से विभाज्य है, तो इसे 2*(n/3) से घटाएं। अंत में n को शून्य तक घटाने के लिए आवश्यक न्यूनतम ऑपरेशन्स की संख्या ढूंढें।

उदाहरण के लिए, यदि इनपुट है n = 16, तो आउटपुट 5 होगा, क्योंकि n = 16 सम है तो इसे n/2 से 4 बार घटाएं, यह 1 हो जाएगा। फिर इसे 1 से घटाकर 0 प्राप्त करें। तो कुल 5 ऑपरेशन्स।

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  1. एक मैप dp परिभाषित करें
  2. एक फंक्शन dfs() परिभाषित करें जो x लेता है
  3. ret := x
  4. यदि x, dp में है, तो dp[x] वापस करें
  5. यदि x ≤ 0, तो x वापस करें
  6. यदि x == 1, तो 1 वापस करें
  7. md2 := x mod 2
  8. md3 := x mod 3
  9. ret := min({ret, md2 + 1 + dfs((x - md2) / 2), md3 + 1 + dfs((x - md3) / 3)})
  10. dp[x] = ret वापस करें
  11. मुख्य विधि से dfs(n) कॉल करें और वापस करें

उदाहरण

#include <bits/stdc++.h>
using namespace std;

unordered_map<int, int> dp;

int dfs(int x) {
    int ret = x;
    if (dp.count(x)) return dp[x];
    if (x <= 0) return x;
    if (x == 1) return 1;
    int md2 = x % 2;
    int md3 = x % 3;
    ret = min({ret, md2 + 1 + dfs((x - md2) / 2), md3 + 1 + dfs((x - md3) / 3)});
    return dp[x] = ret;
}

int solve(int n) {
    return dfs(n);
}

int main() {
    int n = 16;
    cout << solve(n);
}

इनपुट

16

आउटपुट

5
  1. - C++ में संख्या के सम गुणनखंडों का योग

    समस्या विवरण यह प्रोग्राम किसी संख्या के सभी सम गुणनखंड ढूंढता है और इन सम गुणनखंडों का योग गणना करके आउटपुट के रूप में प्रदर्शित करता है। उदाहरण Input: 30 Even divisors: 2 + 6 + 10 + 30 = 48 Output: 48 दृष्टिकोण इसके लिए, हम सभी गुणनखंड ढूंढेंगे। उनमें से सम गुणनखंड ढूंढेंगे और उनका योग निकालेंग

  1. - C++ में संख्या के सम गुणनखंडों का योग (सरल दृष्टिकोण)

    समस्या विवरण इस खंड में हम देखेंगे कि हम किसी संख्या के सभी सम अभाज्य गुणनखंडों का योग कुशल तरीके से कैसे प्राप्त कर सकते हैं। मान लीजिए एक संख्या n = 480 है, हमें इसके सभी गुणनखंड प्राप्त करने हैं। 480 के अभाज्य गुणनखंड 2, 2, 2, 2, 2, 3, 5 हैं। सभी सम गुणनखंडों का योग 2+2+2+2+2 = 10 है। नियम जब

  1. - C++ में रिकर्सन का उपयोग करके किसी संख्या का फैक्टोरियल खोजने का प्रोग्राम

    एक गैर-ऋणात्मक पूर्णांक n का फैक्टोरियल उन सभी धनात्मक पूर्णांकों का गुणनफल होता है जो n से कम या बराबर होते हैं। उदाहरण के लिए: 4 का फैक्टोरियल 24 है। 4! = 4 * 3 * 2 *1 4! = 24 एक पूर्णांक का फैक्टोरियल रिकर्सिव प्रोग्राम या इटरेटिव प्रोग्राम का उपयोग करके पाया जा सकता है। निम्नलिखित प्रोग्राम एक स