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

सी ++ में एक सहयोगी ऑपरेशन के साथ एन तत्वों को गुणा करने के तरीके

इस समस्या में, हमें एक पूर्णांक n दिया गया है जो तत्वों की संख्या है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो साहचर्य संचालन के साथ n तत्वों को गुणा करने के तरीकों की संख्या की गणना करता है।

सहयोगी संचालन संख्याओं को व्यवस्थित करने के तरीके पर ध्यान दिए बिना वही परिणाम लौटाएं।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

3

आउटपुट

12

स्पष्टीकरण

(x*(y*z)), (x*(z*y)), (y*(x*z)), (y*(z*x)), (z*(x*y)), (z*(y*x)),
((x*y)*z), ((y*x)*z), ((x*z)*y), ((z*x)*y), ((z*y)*x), ((y*z)*x).

इस समस्या को हल करने के लिए, हम यह पता लगाने की कोशिश करेंगे कि क्या कोई संबंध या किसी प्रकार की श्रृंखला है जिसे बनाया जा सकता है ताकि हम अपने परिणामों को सामान्य कर सकें। आइए ऑपरेटरों की संख्या के आधार पर सहयोगी संचालन की संख्या देखें -

1 => 1
2 => 2
3 => 12

अब, गिनती को सामान्य बनाने का प्रयास करते हैं। मान लीजिए, हम n तत्वों के लिए सहयोगी संचालन बना रहे हैं, तो हम n-1 गुणा ऑपरेटर और n-1 कोष्ठक रख सकते हैं।

यहां, हम उन्हें दो तरह से व्यवस्थित करेंगे -

  • (n-1 . तक गुणा करने के तरीकों पर विचार ) और फिर हम एसोसिएशन के किसी भी छोर पर अंतिम तत्व को सम्मिलित कर सकते हैं। यह n-1 संख्याओं के लिए n ऑपरेटरों के लिए 2*2*(n-2) संघों से होगा।

  • फिर हम (a1, a2, … a(n-1)) और गुणक a से बाएँ या दाएँ के गुणन पर विचार करेंगे जो साहचर्य बनाने के अतिरिक्त दो तरीके देता है।

आइए उपरोक्त मामले का उपयोग करके n ऑपरेटरों के लिए कुल संघों को जोड़ें और प्राप्त करें।

ass(n) = ((2*2*(n-2))(ass(n-1))) + 2*(ass(n-1))
ass(n) = (4n-8)(ass(n-1)) + 2*(ass(n-1))
ass(n) = (4n-6)(ass(n-1))

यह संबंध छद्म कैटलन संख्या के समान है, जिसका एक ही सूत्र और एक ही आद्याक्षर मान है।

इसलिए, हम यहां छद्म कैटलन संख्या के लिए सामान्य सूत्र लागू कर सकते हैं,

ass(n) = (2*n-2)!/(n-1)!

आइए n =5 के मानों के लिए हमारे सूत्र की कार्यप्रणाली को देखें।

ass(10) = (2*5 - 2)!/ (5-1)!
ass(10) = 8!/4! = 40320/24 = 1680

एसोसिएटिव ऑपरेशन के साथ n तत्वों को गुणा करने के तरीके खोजने का कार्यक्रम

// प्रोग्राम एक सहयोगी ऑपरेशन के साथ n तत्वों को गुणा करने के तरीके खोजने के लिए -

उदाहरण

#include<iostream>
using namespace std;
long int calcFactorial(int n){
   if (n == 0 || n == 1)
      return 1 ;
   return n*calcFactorial(n-1);
}
long int calcWays ( int n ){
   int N = 2*n - 2 ;
   int R = n - 1 ;
   return (calcFactorial((2*n)-2)/calcFactorial(n-1));
}
int main(){
   int n = 7;
   cout<<"The ways to multiply "<<n<<" elements with an associative operation : "<<calcWays(n);
   return 0 ;
}

आउटपुट

The ways to multiply 7 elements with an associative operation : 665280

  1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

    मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे

  1. C++ में O(1) स्पेस में 0 से N-1 के तत्वों के साथ निरंतर सरणी में डुप्लिकेट खोजें

    मान लीजिए हमारे पास 0 से n-1 तक की संख्याओं की एक सूची है। एक संख्या को जितनी बार संभव हो उतनी बार दोहराया जा सकता है। हमें बिना किसी अतिरिक्त स्थान के दोहराई जाने वाली संख्याएँ ज्ञात करनी हैं। यदि n =7, और सूची का मान [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] जैसा है। उत्तर 5, 2, 3 होगा। इसे हल करने के लिए,

  1. सी ++ में प्रमुख आवृत्तियों वाले ऐरे तत्व?

    सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। प्राइम फ़्रीक्वेंसी इसका मतलब है कि सरणी के तत्व की घटना की संख्या एक प्रमुख संख्या है। तो, इन परिभाषाओं के आधार पर अभाज्य आवृत्तियों वाले सरणी तत्वों को खोजने में समस्या। हमें सरणी की एक स्ट्रिंग दी गई है। हमें वर्णों की आवृत्ति का पता लगाना होगा