Расшифровать ребус (4 * Дуб = Роща) - Free Pascal
Формулировка задачи:
Расшифровать ребус, полученный в результате замены одинаковых букв одинаковыми цифрами. Найти также такие значения цифр, при которых сумма цифр в результате окажется наибольшей.
дуб+дуб+дуб+дуб=роща
Решение задачи: «Расшифровать ребус (4 * Дуб = Роща)»
textual
Листинг программы
var
d, u, b, r, o, s, a: integer;
max, maxr, maxo, maxs, maxa: integer;
m: set of byte;
begin
m := [];
for d := 1 to 9 do
if not (d in m) then
begin
Include(m, d);
for u := 0 to 9 do
if not (u in m) then
begin
Include(m, u);
for b := 0 to 9 do
if not (b in m) then
begin
Include(m, b);
for r := 1 to 9 do
if not (r in m) then
begin
Include(m, r);
for o := 0 to 9 do
if not (o in m) then
begin
Include(m, o);
for s := 0 to 9 do
if not (s in m) then
begin
Include(m, s);
for a := 0 to 9 do
if not (a in m) then
begin
Include(m, a);
if 4 * (d * 100 + u * 10 + b) = r * 1000 + o * 100 + s * 10 + a then
begin
if r + o + s + a > max then
begin
max := r + o + s + a;
maxr := r; maxo := o;
maxs := s; maxa := a
end;
WriteLn('4 * ', d, u, b, ' = ', r, o, s, a)
end;
Exclude(m, a)
end;
Exclude(m, s)
end;
Exclude(m, o)
end;
Exclude(m, r)
end;
Exclude(m, b)
end;
Exclude(m, u)
end;
Exclude(m, d)
end;
WriteLn('Значения цифр, при которых сумма цифр в результате наибольшая:');
WriteLn('Р = ', maxr, '; О = ', maxo, '; Щ = ', maxs, '; А = ', maxa);
ReadLn
end.
Объяснение кода листинга программы
- Создается пустое множество
mдля хранения уже использованных чисел. - Происходит итерация по числам от 1 до 9.
- Для каждого числа
dпроверяется, было ли оно уже использовано (есть ли оно в множествеm). - Если число
dне было использовано, то оно включается в множествоm. - Далее, для каждого числа
dпроисходит поиск подходящих чиселu,b,r,o,sиa(такие, чтобы удовлетворять условию ребуса). - Если подходящие числа найдены, то проверяется, является ли сумма этих чисел наибольшей среди всех найденных до этого комбинаций.
- Если да, то значения
maxr,maxo,maxsиmaxaобновляются. - После проверки всех чисел от 1 до 9, выводится сообщение с наибольшими значениями
maxr,maxo,maxsиmaxa. - Программа ожидает ввода пользователя для продолжения работы.