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

C++ में एक ऐरे का डिरेंजमेंट ज्ञात करें

मान लीजिए कि हमारे पास बढ़ते क्रम में 1 से n तक n संख्याओं से युक्त एक सरणी है, तो हमें यह पता लगाना होगा कि यह कितनी गड़बड़ी उत्पन्न कर सकता है।

हम जानते हैं कि संयोजन गणित में, एक विचलन एक सेट के तत्वों का क्रमपरिवर्तन है, जैसे कि कोई भी तत्व अपनी मूल स्थिति में प्रकट नहीं होगा। उत्तर बहुत बड़ा हो सकता है, इसलिए आउटपुट मोड 10^9 + 7 लौटाएं।

इसलिए, यदि इनपुट 3 जैसा है, तो आउटपुट 2 होगा, क्योंकि मूल सरणी [1,2,3] है। दो विकार [2,3,1] और [3,1,2] हैं।

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

  • मी :=10^9 + 7

  • फ़ंक्शन ऐड () को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एम) + (बी मॉड एम)) मॉड एम

  • फ़ंक्शन mul() को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एम) * (बी मॉड एम)) मॉड एम

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

  • रिट:=0

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

    • वापसी 0

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

    • वापसी 1

  • आकार की dp सरणी परिभाषित करें (n + 1)

  • डीपी[2] :=1

  • इनिशियलाइज़ i :=3 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), करें -

    • dp[i] :=mul(i-1, add(dp[i - 2], dp[i - 1]))

  • वापसी डीपी [एन]

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli m = 1e9 + 7;
lli add(lli a, lli b){
   return ((a % m) + (b % m)) % m;
}
lli mul(lli a, lli b){
   return ((a % m) * (b % m)) % m;
}
class Solution {
public:
   int findDerangement(int n) {
      int ret = 0;
      if (n == 1)
         return 0;
      if (n == 2)
         return 1;
      vector dp(n + 1);
      dp[2] = 1;
      for (int i = 3; i <= n; i++) {
         dp[i] = mul(i - 1, add(dp[i - 2], dp[i - 1]));
      }
      return dp[n];
   }
};
main(){
   Solution ob;
   cout<<(ob.findDerangement(3));
}

इनपुट

3

आउटपुट

2

  1. सी ++ में एसटीएल का उपयोग कर ऐरे के तत्वों का योग कैसे प्राप्त करें?

    यहां हम देखेंगे कि किसी सरणी के सभी तत्वों का योग कैसे ज्ञात किया जाए। तो अगर सरणी [12, 45, 74, 32, 66, 96, 21, 32, 27] की तरह है, तो योग होगा:405। तो यहाँ हमें इस समस्या को हल करने के लिए जमा () फ़ंक्शन का उपयोग करना होगा। यह फ़ंक्शन विवरण शीर्षलेख फ़ाइल के अंदर मौजूद है। उदाहरण #include<iostre

  1. सी ++ में एसटीएल का उपयोग कर ऐरे का अधिकतम तत्व कैसे खोजें?

    यहां हम देखेंगे कि अधिकतम तत्व कैसे खोजें। तो अगर सरणी [12, 45, 74, 32, 66, 96, 21, 32, 27] की तरह है, तो अधिकतम तत्व 96 है। हम एल्गोरिदम में मौजूद max_element () फ़ंक्शन का उपयोग कर सकते हैं। प्राप्त करने के लिए हेडर फ़ाइल अधिकतम तत्व। उदाहरण #include<iostream> #include<algorithm> using

  1. C++ का उपयोग करके किसी सरणी में किसी संख्या की आवृत्ति ज्ञात करें।

    मान लीजिए कि हमारे पास एक सरणी है। एन विभिन्न तत्व हैं। हमें सरणी में एक तत्व की आवृत्ति की जांच करनी है। मान लीजिए A =[5, 12, 26, 5, 3, 4, 15, 5, 8, 4], अगर हम 5 की बारंबारता ज्ञात करने की कोशिश करते हैं, तो यह 3 होगा। इसे हल करने के लिए, हम सरणी को बाईं ओर से स्कैन करेंगे, यदि तत्व दिए गए नंबर के