Валя составляет шестибуквенные слова из букв слова ГРОЗА. Сколько слов составит Валя, если на первом месте нельзя использовать букву З, на последнее место нельзя ставить гласные буквы, а буква Г должна встретиться в слове не более 1 раза?
Как будем решать задачу
Закодируем
буквы цифрами от 1 до 5.
О
– 1
А
– 2
Г
– 3
Р
– 4
З
– 5
Запустим
цикл по числам n из промежутка от
111111 до 555555. Преобразуем число n в строку s процедурой str(n,s)
.
Выполним
проверку условий:
1)
В
строке есть символы ‘0’, ‘6’, ‘7’, ‘8’, ‘9’
2)
Последний
символ строки – это ‘1’ или ‘2’
3)
Количество
символов ‘3’ меньше или равно 1
4)
Первый
символ строки – это ‘5’
Если
1-ое условие ложно и 2-ое условие ложно и 3-е условие истинно и 4-ое условие
ложно, то будем увеличивать счетчик подходящих слов t на 1.
Программа решения задачи на языке Паскаль
var n,t:integer; f1,f2,f3,f4:boolean;
s:string;
begin
for n:=111111 to 555555 do
begin
str(n,s);
f1:=('0' in s) or ('6' in s) or ('7' in s) or ('8' in s) or ('9' in s);
f2:=s[6] in ['1','2'];
f3:=s.CountOf('3')<=1;
f4:=s[1]='5';
if (not f1) and
(not f2) and f3 and (not f4) then t+=1;
end;
writeln('Количество слов, которые составит Валя: ',t);
end.
Результат запуска программы
Как ускорить выполнение программы
Поскольку
на последнем месте не может встретиться гласная буква, то есть цифры 1 и 2, то
можно начать с числа 111113, на первом месте не может стоять буква З, то есть
цифра 5, значит можно идти в цикле до числа 455555 и отказаться от проверки 4-ого условия.
В
этом случае программа нашла ответ за 0.884 с.
Комментариев нет:
Отправить комментарий