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

सी++ में कारक संयोजन

मान लीजिए हमारे पास एक नंबर है। संख्याओं को इसके कारकों के उत्पाद के रूप में माना जा सकता है। तो, 8 =2 x 2 x 2; =2 x 4. हमें एक ऐसा फलन बनाना है जो एक पूर्णांक n लेता है और उसके गुणनखंडों के सभी संभावित संयोजनों को लौटाता है।

इसलिए, यदि इनपुट 12 जैसा है, तो आउटपुट [[2, 6], [2, 2, 3], [3, 4]]

होगा।

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

  • एक फ़ंक्शन हल करें () को परिभाषित करें, इसमें n, लक्ष्य, प्रारंभ,

    . लगेगा
  • रिट नामक सूचियों की एक सूची को परिभाषित करें

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

    • वापसी रिट

  • यदि n लक्ष्य के बराबर नहीं है, तो -

    • रिट के अंत में n डालें

  • प्रारंभ करने के लिए i :=start, जब i * i <=n, अद्यतन करें (i से 1 बढ़ाएँ), करें -

    • अगर n mod i 0 के समान है, तो -

      • अन्य =हल करें (n / i, लक्ष्य, i)

      • इनिशियलाइज़ j :=0 के लिए, जब j <दूसरे का आकार, अपडेट करें (1 से j बढ़ाएँ), करें -

        • अन्य के अंत में i डालें[j]

        • रिट के अंत में अन्य [j] डालें

  • वापसी रिट

  • मुख्य विधि से निम्न कार्य करें -

  • वापसी हल (एन, एन, 2)

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto< > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector < vector <int< > solve(int n, int target, int start){
      vector < vector <int< > ret;
      if(n == 1){
         return ret;
      }
      if(n != target){
         ret.push_back({n});
      }
      for(int i = start; i * i <= n; i++){
         if(n % i == 0){
            vector < vector <int< > other = solve(n / i, target,i);
            for(int j = 0; j < other.size(); j++){
               other[j].push_back(i);
               ret.push_back(other[j]);
            }
         }
      }
      return ret;
   }
   vector<vector<int<> getFactors(int n) {
      return solve(n, n, 2);
   }
};
main(){
   Solution ob;
   print_vector(ob.getFactors(16));
}

इनपुट

16

आउटपुट

[[8, 2, ],[4, 2, 2, ],[2, 2, 2, 2, ],[4, 4, ],]

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

    फैक्टोरियल का उपयोग करके संयोजनों की गणना करने के लिए निम्नलिखित एक उदाहरण है। उदाहरण #include <iostream> using namespace std; int fact(int n) {    if (n == 0 || n == 1)    return 1;    else    return n * fact(n - 1); } int main() {    int n, r

  1. सी++ में इनकैप्सुलेशन

    Encapsulation डेटा और विधियों को एक साथ लाता है जो डेटा को एक घटक में हेरफेर करता है और उन्हें बाहरी हस्तक्षेप से बचाता है। संक्षेप में, एनकैप्सुलेशन में डेटा के साथ-साथ डेटा का उपयोग करने वाले कार्यों को बंडल करना शामिल है। डेटा इनकैप्सुलेशन डेटा छिपाने की बहुत महत्वपूर्ण अवधारणा की ओर ले जाता है।

  1. सी ++ में संयोजन

    मान लीजिए कि हमारे पास दो पूर्णांक n और k हैं। हमें 1 ... n में से k संख्याओं के सभी संभावित संयोजनों को खोजना है। तो अगर n =4 और k =2, तो संयोजन [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4 होंगे। ]] इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - हम इसे हल करने के लिए पुनरावर्ती फ़ंक्शन का उपयोग कर