Heim >Backend-Entwicklung >C++ >Eine Anordnung von Wörtern, die die relative Position von Vokalen und Konsonanten nicht verändert?

Eine Anordnung von Wörtern, die die relative Position von Vokalen und Konsonanten nicht verändert?

王林
王林nach vorne
2023-09-01 13:01:061377Durchsuche

Eine Anordnung von Wörtern, die die relative Position von Vokalen und Konsonanten nicht verändert?

Angenommen, wir haben eine Zeichenfolge mit n Elementen (n

Die Methode ist sehr einfach. Wir müssen die Anzahl der Vokale und Konsonanten in einer bestimmten Zeichenfolge zählen, dann müssen wir herausfinden, auf wie viele Arten nur die Vokale angeordnet werden können, dann müssen wir die Anzahl der Arten ermitteln, auf die nur die Konsonanten angeordnet werden können, und dann diese beiden Ergebnisse mit multiplizieren Ermitteln Sie die Gesamtzahl der Wege.

Algorithmus

arrangeWayCount(str)

Begin
   define an array ‘freq’ to store frequency.
   count and place frequency of each characters in freq array. such that freq[‘0’] will hold
   frequency of letter ‘a’, freq[1] will hold frequency of ‘b’ and so on.
   v := number of vowels, and c := number of consonants in str
   vArrange := factorial of v
   for each vowel v in [a, e, i, o, u], do
      vArrange := vArrange / factorial of the frequency of v
   done
   cArrange := factorial of c
   for each consonant con, do
      cArrange := cArrange / factorial of the frequency of con
   done
   return vArrange * cArrange
End

Example

#include <iostream>
using namespace std;
long long factorial(int n){
   if(n == 0 || n == 1)
      return 1;
   return n*factorial(n-1);
}
long long arrangeWayCount(string str){
   long long freq[27] = {0}; //fill frequency array to 0
   int v = 0, c = 0;
   for (int i = 0; i < str.length(); i++) {
      freq[str[i] - &#39;a&#39;]++;
      if (str[i] == &#39;a&#39; || str[i] == &#39;e&#39; || str[i] == &#39;i&#39; || str[i] == &#39;o&#39; || str[i] == &#39;u&#39;) {
         v++;
      }else
         c++;
   }
   long long arrangeVowel;
   arrangeVowel = factorial(v);
   arrangeVowel /= factorial(freq[0]); // vowel a
   arrangeVowel /= factorial(freq[4]); // vowel e
   arrangeVowel /= factorial(freq[8]); // vowel i
   arrangeVowel /= factorial(freq[14]); // vowel o
   arrangeVowel /= factorial(freq[20]); // vowel u
   long long arrangeConsonant;
   arrangeConsonant = factorial(c);
   for (int i = 0; i < 26; i++) {
      if (i != 0 && i != 4 && i != 8 && i != 14 && i != 20)
      arrangeConsonant /= factorial(freq[i]); //frequency of all characters except vowels
   }
   long long total = arrangeVowel * arrangeConsonant;
   return total;
}
main() {
   string str = "computer";
   long long ans = arrangeWayCount(str);
   cout << "Possible ways to arrange: " << ans << endl;
}

Output

Possible ways to arrange: 720

Das obige ist der detaillierte Inhalt vonEine Anordnung von Wörtern, die die relative Position von Vokalen und Konsonanten nicht verändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen