Задача. Алексей составляет 5-буквенные слова из букв М, А, Г, И, С, Т, Р. Каждую букву можно использовать не более одного раза, при этом в слове нельзя использовать более одной гласной. Сколько различных кодов может составить Алексей?
Задачу на перестановки букв слова АВРОРА мы решили с использованием метода Permutations и множеств.
В данной же задаче проблема заключается в том, что длина слова меньше, чем используемый алфавит. Будем использовать метод Permutations с аргументом N, позволяющий брать N символов из набора.
Пример:
Получим все слова из двух букв перестановками букв слова КОТ.
В массиве с сохраним буквы слова КОТ. Получим массивы перестановок функцией c.Permutations(2)
.
Программа на языке Паскаль
var c,x:array of char; s:string;
begin
c:=new char[3];
c[0]:='К'; c[1]:='О'; c[2]:='Т';
foreach x in c.Permutations(2) do
begin
s:=x.JoinToString;
println(s);
end;
end.
Результат запуска программы
Решим задачу про "МАГИСТРА"
Сохраним буквы М, А, Г, И, С, Т, Р в массиве c. Получим все перестановки по 5 символов циклом foreach x in c.Permutations(5) do
. Получим строку оператором s:=x.JoinToString
Если суммарное количество гласных букв ('А' и 'И') меньше или равно 1, то увеличим счетчик искомых слов t на 1.
Программа решения задачи на языке Паскаль
var c,x:array of char; s:string;
t:integer;
begin
c:=new char[7];
c[0]:='М'; c[1]:='А'; c[2]:='Г';
c[3]:='И'; c[4]:='С'; c[5]:='Т';
c[6]:='Р';
t:=0;
foreach x in c.Permutations(5) do
begin
s:=x.JoinToString;
if (s.CountOf('А')+s.CountOf('И'))<=1 then t+=1;
end;
println(t);
end.
Ответ: 1320