Расшифровать ребус (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.

Объяснение кода листинга программы

  1. Создается пустое множество m для хранения уже использованных чисел.
  2. Происходит итерация по числам от 1 до 9.
  3. Для каждого числа d проверяется, было ли оно уже использовано (есть ли оно в множестве m).
  4. Если число d не было использовано, то оно включается в множество m.
  5. Далее, для каждого числа d происходит поиск подходящих чисел u, b, r, o, s и a (такие, чтобы удовлетворять условию ребуса).
  6. Если подходящие числа найдены, то проверяется, является ли сумма этих чисел наибольшей среди всех найденных до этого комбинаций.
  7. Если да, то значения maxr, maxo, maxs и maxa обновляются.
  8. После проверки всех чисел от 1 до 9, выводится сообщение с наибольшими значениями maxr, maxo, maxs и maxa.
  9. Программа ожидает ввода пользователя для продолжения работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.5 из 5