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

हैंडशेक जो C++ में क्रॉस नहीं करते हैं

मान लीजिए कि हमारे पास सम संख्या में n लोग हैं जो एक वृत्त के चारों ओर खड़े हैं और प्रत्येक व्यक्ति किसी और से हाथ मिलाता है, जिससे कुल n / 2 हैंडशेक होंगे। हमें यह पता लगाना होगा कि ये हैंडशेक कितने तरीकों से हो सकते हैं ताकि कोई भी हैंडशेक पार न हो। उत्तर बहुत बड़े हो सकते हैं इसलिए उत्तर मोड 10^9 + 7 लौटाएं।

इसलिए, यदि इनपुट n =2 जैसा है, तो आउटपुट 1

. होगा

हैंडशेक जो C++ में क्रॉस नहीं करते हैं

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

  • मी :=10^9 + 7

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

  • डीपी [0] :=1

  • इनिशियलाइज़ करने के लिए i:=0, जब i <=n, अपडेट i :=i + 2, करें -

    • इनिशियलाइज़ j :=0 के लिए, जब j <=i-2, j :=j + 2 को अपडेट करें, −

      करें
      • डीपी [i]:=डीपी [i] + (डीपी [जे] मॉड एम * डीपी [i - 2 - जे] मॉड एम)

      • डीपी [i]:=डीपी [i] मॉड एम

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

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

उदाहरण

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

इनपुट

2

आउटपुट

1

  1. जोड़े की संख्या की गणना करें (ए <=एन, बी <=एन) जैसे कि जीसीडी (ए, बी) सी ++ में बी है

    हमें एक इनपुट एन दिया गया है। लक्ष्य ए, बी के सभी जोड़ों को ढूंढना है जैसे कि 1<=A<=N और 1<=B<=N और जीसीडी (ए, बी) बी है। सभी जोड़े में सबसे बड़ा है बी के रूप में सामान्य भाजक। आइए उदाहरणों से समझते हैं। इनपुट -एन=5 आउटपुट - जोड़े की संख्या की गणना करें (ए <=एन, बी <=एन) जैसे कि जीसीडी (ए, बी) बी

  1. एक सरणी में जोड़े (x, y) की संख्या जैसे कि x <y C++ . में

    हमें एक पूर्णांक सरणी दी गई है और कार्य जोड़े की कुल संख्या (x, y) की गणना करना है जिसे दिए गए सरणी मानों का उपयोग करके बनाया जा सकता है जैसे कि x का पूर्णांक मान है y से कम। इनपुट - int arr[] ={ 2, 4, 3, 1 } आउटपुट - एक सरणी में जोड़े (x, y) की संख्या जैसे कि x

  1. सी ++ में एक सरणी में क्रॉस लाइनों की गणना करना

    हमें अलग-अलग तत्वों की एक सरणी दी गई है जो क्रमबद्ध नहीं हैं। लक्ष्य सरणी को क्रमबद्ध करने के बाद क्रॉस लाइनों को खोजना है। क्रॉस लाइन की गणना नीचे दर्शाए अनुसार की जाती है - Arr[]={ 1,2,4,3,5 } नीचे दिखाए गए अनुसार 3 क्रॉस लाइन हैं एआर [] ={ 1,2,3,4,5}। कोई क्रॉस लाइन नहीं है क्योंकि सरणी