159-misol. "kamalak” so‘zidagi harflar yordamida har biri yettita harfdan iborat bo‘lgan nechta so‘z tuzish mumkin?
Oldingi masaladan farqli o‘laroq, bu masaladagi so‘zning hamma harflari ham har xil emas (oldingi masalada hamma raqamlar har xil edi). Agar hamma harflar har xil bo‘lganda edi, u holda ulardan 7! ta har xil so‘z tuzish mumkin edi.
Lekin harflarning o‘rnini almashtirishda har doim ham yangi so‘z hosil bo‘lavermaydi. Ko‘rinib turibdiki, "k" harfini o‘zaro “a" harfi bilan almashtirish yangi so‘z bermaydi. U holda ko‘rilayotgan masalaning maqsadi natijada bir xil so‘z hosil bo‘ladigan o‘rin almashtirishlarning sonini aniqlashdan iborat bo‘lib qoladi. Natijada bir xil so‘z hosil bo‘ladigan “k" harfini o‘zaro o‘rin almashtirishlar soni 2! ga teng. Bunday o‘rin almashtirishning har biridan so‘ng "a" harfi 3! usul bilan o‘rin almashtirilishi mumkin. Ko‘paytma qoidasini qo‘llagan holda, har bir so‘z marta takrorlanishining guvohi bo‘lamiz, u holda "kamalak " so‘zidan tuzish mumkin bo‘lgan har xil so‘zlar soni ga teng.
Umuman olganda, bizga nta elementdan tashkil topgan, ulardan a element -n1 marta, b - n2 marta, c - n3 marta, … takrorlanadigan (bu yerda M = {a, b, c, ...} to‘plam berilgan bo‘lsin.
Unga kiradigan elementlarning berilgan takrorlanish soni orqali o‘rin almashtirishlar miqdorini topish kerak.
Bu holda o‘rin almashtirishlar soni quyidagi formula orqali topiladi:
bu yerda, Agar u holda bu formula quyidagi ko‘rinishga kiradi:
#include #include using namespace std;
int Fakt(int n)
{
int S=1;
for (int i = 1; i <= n; i++)
S *= i;
return S;
}
int main()
{
int S1, S2, S, n, n1, k;
cout << "Elementlar sonini kiriting: "; cin >> n;
cout << "Bittadan ortiq qatnashgan elementlar qancha: "; cin >> n1;
S1 = Fakt(n);
cout << S1 << endl;
for (int i = 1; i <= n1; i++)
{
cin >> k;
S2 = Fakt(k);
S1 = S1 / S2;
}
cout << "S=" << S1 << endl;
return 0;
}