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

C++ में स्वरों के क्रमपरिवर्तन की गणना करें

मान लीजिए कि हमारे पास एक संख्या n है, तो हमें यह गिनना होगा कि इन नियमों का उपयोग करके n लंबाई के कितने तार बनाए जा सकते हैं - प्रत्येक वर्ण एक लोअर केस स्वर है प्रत्येक स्वर 'a' के बाद केवल 'e' हो सकता है। प्रत्येक स्वर 'ई' के बाद केवल 'ए' या 'आई' हो सकता है। प्रत्येक स्वर 'i' के बाद दूसरा 'i' नहीं हो सकता है। प्रत्येक स्वर 'ओ' के बाद केवल 'मैं' या 'यू' हो सकता है। प्रत्येक स्वर 'यू' के बाद केवल 'ए' हो सकता है। उत्तर बहुत बड़ा हो सकता है, इसलिए हमें उत्तर मॉड्यूल 10^9 + 7 मिलेगा।

इसलिए, यदि इनपुट 2 की तरह है, तो आउटपुट 10 होगा, ऐसा इसलिए है क्योंकि सभी संभावित तार "एई", "ईए", "ईआई", "आईए", "यानी", "आईओ", "आईयू" हैं। , "ओई", "ओयू", "यूए"।

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

  • एम =1^9 + 7

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

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

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

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

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

  • आकार की एक सरणी ए परिभाषित करें:5 x 5:={{0,1,0,0,0},{1,0,1,0,0},{1,1,0,1,1},{ 0,0,1,0,1},{1,0,0,0,0}}

  • आकार का एक सरणी परिणाम परिभाषित करें:5 x 5.

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

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

      • यदि मैं j के समान है, तो परिणाम[i, j] :=1

      • अन्यथा, परिणाम [i, j] :=0

  • (n से 1 घटाएं)

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

    • परिणाम =परिणाम * ए

  • योग :=0

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

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

      • योग:=जोड़ें (परिणाम [i, j], योग)

  • वापसी राशि

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

उदाहरण

#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:
   void multiply(lli A[5][5], lli B[5][5]){
      lli C[5][5];
      for(lli i =0;i<5;i++){
         for(lli j=0;j<5;j++){
            lli temp =0;
            for(lli k =0;k<5;k++){
               temp = add(temp,mul(A[i][k],B[k][j]));
            }
            C[i][j] = temp;
         }
      }
      for(lli i =0;i<5;i++){
         for(lli j =0;j<5;j++){
            A[i][j] = C[i][j];
         }
      }
   }
   lli solve(lli n){
      lli A[5][5] = { { 0, 1, 0, 0, 0 }, { 1, 0, 1, 0, 0 }, { 1, 1,
      0, 1, 1 }, { 0, 0, 1, 0, 1 }, { 1, 0, 0, 0, 0 } };
      lli result[5][5];
      for (lli i = 0; i < 5; i++) {
         for (lli j = 0; j < 5; j++) {
            if (i == j)
               result[i][j] = 1;
            else
               result[i][j] = 0;
         }
      }
      n--;
      for (int i = 1; i <= n; i++)
      multiply(result, A);
      lli sum = 0;
      for (lli i = 0; i < 5; i++) {
         for (lli j = 0; j < 5; j++) {
            sum = add(result[i][j], sum);
         }
      }
      return sum;
   }
   int countVowelPermutation(int n) {
      return solve(n);
   }
};
main(){
   Solution ob;
   cout << (ob.countVowelPermutation(2));
}

इनपुट

2

आउटपुट

10

  1. C++ प्रोग्राम में पॉइंटर का उपयोग करके एक स्ट्रिंग में स्वरों को गिनने के लिए

    पॉइंटर्स का उपयोग करके एक स्ट्रिंग में स्वरों की संख्या का पता लगाने के लिए आपको स्ट्रिंग, स्वर और स्ट्रिंग के साथ पॉइंटर का उपयोग करने के तरीके को समझने की आवश्यकता है। स्ट्रिंग वर्णों की एक सरणी है। और स्वर समुच्चय {a,e,i,o,u} के वर्ण हैं। पॉइंटर एक वेरिएबल है जो एक वेरिएबल पर मेमोरी लोकेशन के मा

  1. सी ++ प्रोग्राम पॉइंटर का उपयोग कर एक स्ट्रिंग में स्वरों की गणना करने के लिए?

    एक स्ट्रिंग से स्वर प्राप्त करने के लिए, हमें स्ट्रिंग के प्रत्येक वर्ण के माध्यम से पुनरावृति करनी होगी। यहां हमें स्ट्रिंग के माध्यम से जाने के लिए पॉइंटर्स का उपयोग करना होगा। इसके लिए हमें सी स्टाइल स्ट्रिंग्स की जरूरत है। यदि स्ट्रिंग को str द्वारा इंगित किया जाता है, तो *str शुरुआत में पहला वर

  1. सी ++ में लेक्सिकोग्राफिक रूप से अगला क्रमपरिवर्तन

    यहां हम देखेंगे कि सी ++ में एक स्ट्रिंग के लेक्सिकोग्राफिक रूप से अगले क्रमपरिवर्तन को कैसे उत्पन्न किया जाए। लेक्सिकोग्राफिक रूप से अगला क्रमपरिवर्तन मूल रूप से अधिक से अधिक क्रमपरिवर्तन है। उदाहरण के लिए, ACB का अगला BAC होगा। कुछ मामलों में, लेक्सिकोग्राफ़िक रूप से अगला क्रमपरिवर्तन मौजूद नहीं ह