Maison  >  Article  >  développement back-end  >  Un agencement de mots qui ne change pas les positions relatives des voyelles et des consonnes ?

Un agencement de mots qui ne change pas les positions relatives des voyelles et des consonnes ?

王林
王林avant
2023-09-01 13:01:061311parcourir

Un agencement de mots qui ne change pas les positions relatives des voyelles et des consonnes ?

Supposons que nous ayons une chaîne contenant n éléments (n

La méthode est très simple. Nous devons compter le nombre de voyelles et de consonnes dans une chaîne donnée, puis trouver de combien de manières seules les voyelles peuvent être disposées, puis trouver le nombre de manières dont seules les consonnes peuvent être disposées, puis multiplier ces deux résultats par obtenez le nombre total de façons.

Algorithme

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

Exemple

#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;
}

Sortie

Possible ways to arrange: 720

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer