Задача. Лера составляет 5-буквенные слова из букв Л, О, Г, А, Р, И, Ф, М, причём никакие две гласные или две согласные не должны стоять рядом. Буквы в слове не должны повторяться. Сколько слов может составить Лера?
Так как буквы в слове не должны повторяться, значит получать слова будем перестановками букв. Ранее мы решали задачи на перестановки, например, про Магистра.
Как будем решать задачу
Заведем три символьных массива: массив гласных букв bg, массив согласных букв bs и массив всех букв c (его мы получим суммой гласных и согласных букв).
Получим 5-буквенное слово s перестановками букв массива c.
foreach x in c.Permutations(5) do
s := x.JoinToString;
Заведем переменную f (флаг, тип boolean) и сохраним в ней значение true (истина) - это будет означать, что никаких рядом стоящих двух согласных или двух гласных букв в слове нет. Получим все перестановки из двух гласных букв (переменная y). Если сочетание двух гласных букв в слове s есть, присвоим флагу значение false (ложь). Так же поступим с согласными буквами. Если переменная f в итоге хранит значение true, значит слово s получено верно, счетчик искомых слов t увеличим на 1: if f then t+=1;
Программа решения задачи на языке Паскаль
var
c, x, y, bg, bs: array of char;
s,d: string; t: integer; f:boolean;
begin
c:= new char[8]; bg:= new char[3]; bs:= new char[5];
bg[0]:='О'; bg[1]:='А'; bg[2]:='И';
bs[0]:= 'Л'; bs[1]:= 'Г'; bs[2]:= 'Р'; bs[3]:= 'Ф'; bs[4]:= 'М';
c:=bg+bs; //все буквы
t := 0;
foreach x in c.Permutations(5) do
begin
s := x.JoinToString;
f:=true; //нет двух гласных или двух согласных рядом
foreach y in bg.Permutations(2) do
begin
d:=y.JoinToString;
if d in s then f:=false;
end;
foreach y in bs.Permutations(2) do
begin
d:=y.JoinToString;
if d in s then f:=false;
end;
if f then t+=1;
end;
println('Количество слов, которые составит Лера: ',t);
end.
Ответ: 480
Результат выполнения программы
Другие задачи на перестановки
Сколько существует шестнадцатеричных трехзначных чисел, в которых все цифры различны и никакие две четные или две нечетные цифры не стоят рядом Читать |
Настя составляет коды из букв слова НАСТЯ. Код должен состоять из 7 букв, буква Н должна встречаться в нём ровно два раза, буква А – как минимум один раз. Сколько различных кодов может составить Настя Читать |
Алексей составляет 5-буквенные слова из букв М, А, Г, И, С, Т, Р. Каждую букву можно использовать не более одного раза, при этом в слове нельзя использовать более одной гласной. Сколько различных кодов может составить Алексей Читать |
Комментариев нет:
Отправить комментарий