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 संचालन।

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

  • एक मानचित्र डीपी परिभाषित करें

  • फ़ंक्शन को परिभाषित करें dfs(), इसमें x लगेगा,

  • रिट :=x

  • यदि x dp में है, तो -

    • वापसी डीपी [एक्स]

  • यदि x <=0, तो -

    • वापसी x

  • यदि x 1 के समान है, तो -

    • वापसी 1

  • एमडी2:=एक्स मॉड 2

  • एमडी3:=एक्स मॉड 3

  • ret :=न्यूनतम {ret, md2 + 1 + dfs ((x - md2) / 2), md3 + 1 + dfs ((x - md3) / 3)}

  • वापसी डीपी [एक्स] =सेवानिवृत्त

  • मुख्य विधि से कॉल करें और 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 dividers : 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. सी ++ प्रोग्राम रिकर्सन का उपयोग करके किसी संख्या के फैक्टोरियल को खोजने के लिए

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