Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Sắp xếp từ không đổi vị trí tương đối nguyên âm/phụ âm trong C

Cho chuỗi, đếm số cách sắp xếp lại các ký tự mà vị trí tương đối của nguyên âm và phụ âm không đổi.

Cách làm

  1. Đếm số nguyên âm (v) và phụ âm (c)
  2. Số cách sắp xếp nguyên âm: v! / (tần suất mỗi nguyên âm!)
  3. Số cách sắp xếp phụ âm: c! / (tần suất mỗi phụ âm!)
  4. Kết quả = tích 2 giá trị trên

Chương trình

#include <iostream>
using namespace std;

long long fact(int n) {
    return (n <= 1) ? 1 : n * fact(n-1);
}

long long countArrangements(string str) {
    long long freq[26] = {0};
    int v = 0, c = 0;
    for (char ch : str) {
        freq[ch - 'a']++;
        if (strchr("aeiou", ch)) v++; else c++;
    }
    
    long long vow = fact(v);
    vow /= fact(freq[0]);  // a
    vow /= fact(freq[4]);  // e
    vow /= fact(freq[8]);  // i
    vow /= fact(freq[14]); // o
    vow /= fact(freq[20]); // u
    
    long long con = fact(c);
    for (int i = 0; i < 26; i++)
        if (i!=0 && i!=4 && i!=8 && i!=14 && i!=20)
            con /= fact(freq[i]);
    
    return vow * con;
}

int main() {
    string str = "computer";
    cout << "So cach sap xep: " << countArrangements(str);
    return 0;
}

Kết quả

So cach sap xep: 720